相关疑难解决方法(0)

GNU链接器中-l和-L选项的顺序是否重要?

-l选项告诉链接器搜索标准目录中的库.使用-L,我们可以指定自己的库目录进行搜索.

问题:顺序顺序是否也与-L选项有关,就像-l wrt链接器一样?

这个链接:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html没有多说-L的序列.

编辑 另外,

在默认目录之前搜索命令行中指定的目录

是来自手册页(正如Dmitry指出的那样),这是否意味着即使我指定的顺序如下:

gcc -lm hello.c -Lx
Run Code Online (Sandbox Code Playgroud)

仍然首先给出用-L指定的目录?

linker gcc ld binutils

19
推荐指数
1
解决办法
7489
查看次数

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

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

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

g++ -g3 -Wall -I"../../" -lrt -lroller -o rap main.o
Run Code Online (Sandbox Code Playgroud)

它抱怨了许多错误,例如:

/....../main.cpp:51: undefined reference to `Log::i(char const*, ...)'
Run Code Online (Sandbox Code Playgroud)

但是,我知道这些存在于此:

nm -Ca /usr/lib/libroller.so | grep "Log::i"            
00000000001f5d50 T Log::i(char const*, ...)
0000000000149530 W Log::i(std::string const&)
Run Code Online (Sandbox Code Playgroud)

两者都是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
Run Code Online (Sandbox Code Playgroud)

GCC不同,ld找不到导出的符号......但它们就在那里!我很确定这些符号是定义的.同样的.so使用一些相同的符号与另一个.

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

linker gcc shared-libraries linker-errors

6
推荐指数
1
解决办法
4651
查看次数

标签 统计

gcc ×2

linker ×2

binutils ×1

ld ×1

linker-errors ×1

shared-libraries ×1