链接器错误未定义引用,即使在共享库中定义了函数 我试图用一个新的函数在两个库中定义一个C++代码(用GCC工具链在Linux下开发),一个共享库(称为LIbsio4API API)和一个静态库(称为SIO4SUnMy.a)。原始代码是用一个makefile构建的,该makefile首先创建一个链接到各个对象文件的共享库,然后将该库链接到主对象文件。 这是链接共享库的行: g++ -s -shared main.o RTLinkResolution.o IORefresh.o UserProgramImpl.o UserProgramDataManager.o UserProgramCode.o -L./genericFiles/lib -lUserProgramEnvironment -lm -o libUProg.so

链接器错误未定义引用,即使在共享库中定义了函数 我试图用一个新的函数在两个库中定义一个C++代码(用GCC工具链在Linux下开发),一个共享库(称为LIbsio4API API)和一个静态库(称为SIO4SUnMy.a)。原始代码是用一个makefile构建的,该makefile首先创建一个链接到各个对象文件的共享库,然后将该库链接到主对象文件。 这是链接共享库的行: g++ -s -shared main.o RTLinkResolution.o IORefresh.o UserProgramImpl.o UserProgramDataManager.o UserProgramCode.o -L./genericFiles/lib -lUserProgramEnvironment -lm -o libUProg.so,c++,gcc,shared-libraries,static-libraries,linker-errors,C++,Gcc,Shared Libraries,Static Libraries,Linker Errors,我以这种方式对其进行了修改,以将我的库添加到链接中(-pthread是其中一个库所需要的): 此链接会在没有错误的情况下终止,在生成的库中,我可以看到我想要使用的函数(在本例中,我只显示了一个函数,但也显示了其他函数): 问题是,当完成最终链接时,找不到函数: g++ -o test main.o libUProg.so -pthread sio4_main.a libsio4_api.so libUProg.so: undefined reference to `sio4_async_clos

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

此链接会在没有错误的情况下终止,在生成的库中,我可以看到我想要使用的函数(在本例中,我只显示了一个函数,但也显示了其他函数):

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

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*)'
我已经在其他主题中搜索了类似的问题,我发现库馈送到链接器的顺序很重要,但即使我在最终链接命令中更改了顺序,也找不到这些函数。
有人知道我该怎么做吗?

你忘了在“C”外部添加代码了吗?
libUProg.so
是否来自C源文件?这可能就是问题所在。新的库是用GCC从源于C的源文件编译的,而我在这里用G++编译C++代码。然后研究名称的篡改,以及<代码>外部的“C”< /代码>。
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*)'