gpt4 book ai didi

linker - ar 引入了 undefined reference

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

我正在尝试弄清楚如何使用静态库,但最简单的示例失败了:

//foo.c
int func(int i) {
return i+1;
}
//main.c
int func(int i);
int main() {
return func(41);
}

编译 foo.cmain.c 有效:

gcc -Wall -o foo.o -c foo.c
gcc -Wall -o main.o -c main.c

归档 foo.o 也不会提示:

ar rcs libfoo.a foo.o

但是由于未定义对 func 的引用而导致链接失败:

ld libfoo.a main.o
ld -L. -lfoo main.o

都给我:

ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
main.o: In function `main':
main.c:(.text+0xa): undefined reference to `func'

如果我绕道通过 gcc 链接,我会得到类似的错误:

gcc libfoo.a main.o
gcc -L. -lfoo main.o

给我:

main.o: In function `main':
main.c:(.text+0xa): undefined reference to `func'
collect2: ld returned 1 exit status

我在这里做错了什么?根据我阅读/使用的所有手册和搜索引擎,这是使用静态库的方式。


编辑:注意 gcc foo.o main.o 工作得很好。

最佳答案

在尝试了很多愚蠢的事情之后,最愚蠢的想法是解决方案:ld 首先想要目标文件,然后 文件。耶!

gcc libfoo.a main.o  // fails
gcc main.o libfoo.a // works

如果您使用 -L.-lfoo 指定库,情况也是如此:放置 -L 的位置显然无关紧要, 但是你把 -lfoo 放在哪里和直接指定 .a 文件一样重要。

关于linker - ar 引入了 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7944798/

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