0

我正在尝试修改一段 C++ 代码(在 Linux 下使用 gcc 工具链开发),在其中使用两个库中定义的新函数,一个共享库(称为 libsio4_api.so)和一个静态库(称为 sio4_main.a) . 原始代码是使用 makefile 构建的,该文件首先创建一个链接到各种目标文件的共享库,然后将该库与主目标文件链接。这是链接共享库的行:

g++ -s -shared main.o RTLinkResolution.o IORefresh.o UserProgramImpl.o UserProgramDataManager.o UserProgramCode.o -L./genericFiles/lib -lUserProgramEnvironment -lm -o libUProg.so

我以这种方式对其进行了修改,以将我的库添加到链接中(其中一个需要-pthread):

g++ -s -shared -pthread libsio4_api.so sio4_main.a main.o RTLinkResolution.o IORefresh.o UserProgramImpl.o UserProgramDataManager.o UserProgramCode.o -L./genericFiles/lib -lUserProgramEnvironment -lm -o libUProg.so

这个链接没有错误地终止,在生成的库中我可以看到我想要使用的函数(在这个例子中,我只展示了一个,但其他的也存在):

nm -D libUProg.so | grep sio4_async_init
000000000006d581 T sio4_async_init
000000000006dcae T sio4_async_init_data
             U _Z15sio4_async_initv

问题是,当最终链接完成时,找不到函数:

g++ -o test main.o libUProg.so -pthread sio4_main.a libsio4_api.so
libUProg.so: undefined reference to `sio4_async_close(int)'
libUProg.so: undefined reference to `sio4_async_init()'
libUProg.so: undefined reference to `sio4_async_open(int, int, int*)'

我已经在其他主题中搜索过类似的问题,我发现将库提供给链接器的顺序很重要,但即使我在最终链接命令中更改了顺序,也找不到这些函数。有人对我如何进行有任何线索吗?

4

0 回答 0