1
我有一個基本的共享庫我建立用於實踐,並且所有它定義爲在建立共享庫,但未定義的函數引用?
int placeholder() { return 1; }
形式功能佔位符我建立它像這樣,在生成文件的libtool爲了便於(相關部分) :
libfootest: $(OBJECTS)
libtool --mode=link $(CC) -g -O -o libfootest.la $(OBJECTS)\
-rpath /usr/lib
libfootest.o: $(SRCDIR)/$(SOURCES)
libtool --mode=compile $(CC) -c $(SRCDIR)/$(SOURCES)
install: libfootest
libtool --mode=install cp libfootest.la /usr/lib/libfootest.la
現在我可以驗證)它安裝與適當.so.*
和.la
,b)nm
具有在各個libtool的對象中定義的符號placeholder
(libfootest.o連接)之前,相信是所有我需要的。
我那麼現在正在創建用於測試目的的程序,
#include "../includes/libfootest.h" //public prototypes are here
int main() {
int test = placeholder();
return 0;
}
而像-lfootest
和鏈接它的發現,但不幸的是我得到一個未定義的引用錯誤佔位符!
/tmp/cc92NtSa.o: In function `main':
prototypes.cxx:(.text+0x19): undefined reference to `placeholder()'
你能發現我在這做錯了什麼,或者是否有某種出口我必須爲圖書館工作?我看到一些apis在它們的函數聲明之前使用了DLLEXPORT或類似函數,但我不確定它們的功能。
你的'readelf -Wa libfootest.so | grep placeholder'輸出是什麼? – aponomarenko 2011-03-30 06:49:11
@開發人員:不幸的是,在它的函數名稱沒有結果,並且完整的輸出似乎沒有提供很多線索。必須有一些「可見性」功能來解決這個問題。 – 2011-03-30 06:53:04