我使用我不能加載它的gcc /克+ +在Fedora 116,和我的想法是:我可以加載動態庫函數與鏈接此DL,但在代碼中使用「對dlsym」沒有鏈接這個DL
c program -> load c++ dynamic library A -> load c++ dynamic library B
C++動態庫B是第三方提供的,我無法對其進行修改。
當complinng C++動態庫中的與連接C++動態庫B,A可以在B.找到符號但是,當我的負載b函數A碼使用 '對dlsym'(未連接),A告訴我
/path/to/B.so: undefined symbol: some_func
=============================
使用納米-DC
0000000000014a80 T BinarySearch(int, int*, int)
0000000000007210 T CheckLicense()
0000000000009370 T GetEnd(stCha*, int&, int)
000000000000a970 T IC_Exit()
000000000000a740 T IC_Init(char const*)
錯誤報告:
/path/to/some.so undefined symbol: IC_Init
在庫中的代碼:
IC_API bool (* IC_Init)(const char *);
IC_Init = (IC_API bool (*)(const char *)) dlsym(dl_ic, "IC_Init");
if(IC_Init) {
printf("function loaded");
}
在庫中的
,它可以使用dlopen加載庫B:
void *dl_ic = dlopen(ic_lib_path, RTLD_LAZY);
也許你可以顯示A使用的代碼,包括'dlopen()'和'dlsym()'鏈接到B中的函數? – 2012-03-02 01:29:38
當構建'libA.so'時,你鏈接'libB.so'嗎?你使用'-rdynamic'來鏈接你的整個可執行文件。 – 2012-03-02 06:14:17