gpt4 book ai didi

gcc - 链接器告诉我它无法解析符号,但它们在那里?

转载 作者:行者123 更新时间:2023-12-04 15:03:04 26 4
gpt4 key购买 nike

我正在尝试使用我编写的库编译一个简单的测试应用程序。这在其他机器上编译并运行良好。

我在/usr/lib 有 libroller.so。我正在编译一个 main.cpp :

g++ -g3 -Wall -I"../../" -lrt -lroller -o rap main.o

它提示许多错误,例如:
/....../main.cpp:51: undefined reference to `Log::i(char const*, ...)'

但是,我知道这些存在于此,因此:
nm -Ca /usr/lib/libroller.so | grep "Log::i"            
00000000001f5d50 T Log::i(char const*, ...)
0000000000149530 W Log::i(std::string const&)

两者都是 64 位:
file /usr/lib/libroller.so           
/usr/lib/libroller.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

file main.o
main.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

不像 GCC and ld can't find exported symbols...but they're there!我很确定这些符号已定义。相同的 .so 与使用一些相同符号的另一个一起使用。

编辑/答案:对象的顺序很重要。将 main.o 放在库之前是必要的。我猜链接器在到达 main.o 之前没有未解析的符号要处理——这是其列表中的最后一个对象。我仍然有点困惑为什么这在其他机器上工作了好几个月......

最佳答案

改变:

g++ -g3 -Wall -I"../../" -lrt -lroller -o rap main.o

到:
g++ -g3 -Wall main.o -lroller -lrt -o rap 

链接顺序很重要(在这种情况下 -I 是多余的)。

关于gcc - 链接器告诉我它无法解析符号,但它们在那里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8382153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com