我一直在努力與dlopen
和未定義的符號。C:處理共享對象中的未定義符號
我已經和到目前爲止已經試過:與功能functionA()
libraryB.so這是使用functionA()
libraryA.a與功能functionA()
libraryA.so
執行能夠加載libraryB.so與dlopen。
我得到的是:
undefined symbol: functionA
如何我構建:
LibraryA的:
gcc -std=gnu11 -O2 -g -Wall -Wstack-usage=2000 -Werror
-fdiagnostics-color -fPIC -pipe -fsigned-char -fno-asynchronous-unwind-tables
-fno-stack-protector -I../include/ libraryA.c -shared -o libraryA.so
libraryB:
gcc -std=gnu11 -O2 -g -Wall -Wstack-usage=2000 -Werror -fdiagnostics-color
-fPIC -pipe -fsigned-char -fno-asynchronous-unwind-tables
-fno-stack-protector -I../include/ libraryB.c -shared -o libraryB.so
建立可執行的:
-std=gnu99 -pipe -fno-strict-aliasing -fsigned-char -fno-asynchronous-unwind-tables
-fno-stack-protector -Wall -Wextra -Wundef -Wno-sign-compare -Wno-unused-parameter
-Wno-packed-bitfield-compat -Wno-misleading-indentation -fomit-frame-pointer
-maccumulate-outgoing-args -fPIC -m64 -g3 -gdwarf-2 -fno-common -Wstrict-prototypes
-Wimplicit -Wno-pointer-sign -c executable.c -o executable libraryA.a
打開libraryB在執行這樣的位置:
void *handle = dlopen("libraryB.so", RTLD_LAZY);
if (handle == NULL) {
fprintf(stderr, "Load error (%s)!\n", dlerror());
return NULL;
}
我怎樣才能解決這個問題?我也嘗試過國旗-rdynamic沒有成功。我也嘗試了不同的dlopen標誌,但也沒有成功。
任何人都可以幫我嗎?
這也是我用** - L **和** - l **選項嘗試過的,但是我仍然有** libraryB中的未定義符號** – Elec
不,只是明確列出'libraryB.so'鏈接命令。 –
尚未解決。 'gcc -std = gnu11 -O2 -g -Wall -Wstack-usage = 2000 -Werror -fdiagnostics-color -fPIC -pipe -fsigned-char -fno-asynchronous-unwind-tables -fno-stack-protector -I ../ include/libraryA.so libraryB.c -shared -o libraryB.so' – Elec