這次的OOAD作業要我們練習用dll 來測試c++ dynamic binding的功能。以前沒寫過dll,雖然說助教有教如何用VC++來寫,不過不大想用VC,就先去找了篇介紹如何用gcc來做dll 的方法,想說g++應該是如法炮製就好。可是不管我怎麼照著說明上的做,在最後linking時總是會出現unresolved symbol 的錯誤...@@,由於deadline已經快到了(半夜,我直到11:30都還解決不了這個問題),最後只好用土撥鼠提供的賤招先交作業再說....=_=

之後我趁機問了一下跳級生,看他是如何解決這個問題的,可是沒想到他竟然說他都是照著我的那一份gcc的教學做的!!靠~明明我就試不成功啊.....@@。後來想到從他的makefile中看看和我的做法有何差異,看了老半天才發現,原來教學上只有在編dll 時有加 -fPIC 的flag,而他則是為了方便起見(都同一個CFLAG變數),在編每個obj檔時都有加!我回去試了後,證明他的誤打誤撞才是對的...orz
以下附上簡單版的教學:
/* hello.c */
#include<stdio.h>
void hello(){ printf("Hello "); }
/* world.c */
#include<stdio.h>
void world(){ printf("world\n"); }
/* mylib.h */
void hello();
void world();
編譯的步驟如下:
  1. gcc -c -fPIC hello.c world.c
  2. gcc -shared -o libmylib.so hello.o world.o
  3. 要使用時則是利用dlopen等dl function來處理即可 (記得在編有用到dl function的檔時也要加上-fPIC)
arrow
arrow
    全站熱搜

    cym 發表在 痞客邦 留言(0) 人氣()