libtiff build undefined 引用“_imp__TIFFOpen”错误

libtiff build undefined reference to `_imp__TIFFOpen' error

提问人:MaxC 提问时间:9/30/2020 最后编辑:MaxC 更新时间:9/30/2020 访问量:936

问:

可能这是一个微不足道的新手问题,但是,我不知道如何解决它。

我正在尝试使用(从这里复制的测试程序)构建测试程序。我已经下载了静态库以及所需的头文件。当我毫无问题地编译主 c 函数时,我有一个文件。当我尝试使用此命令链接main.o时libtifflibtiff.libtiffio.hmain.olibtiff

gcc -g -Wall -o test.exe ./libtiff.lib ./test.o

我有这个错误:

undefined reference to `_imp__TIFFOpen'

我已经用命令查看了 lib 文件,我可以找到这一行nm -A libtiff.lib

libtiff.lib:libtiff3.dll:00000000 I __imp__TIFFOpen

但它有 2 个前导下划线,而不是链接器要求的 1 个。我在 Windows 7 上使用 mingw,所有必需的文件都在同一个目录中。

不知道如何链接没有错误。

提前致谢。

c linker mingw undefined-reference libtiff

评论

1赞 Antti Haapala -- Слава Україні 9/30/2020
GNU 链接器通常从左到右链接库。您需要在命令行上放置 after your.libtest.o
0赞 MaxC 9/30/2020
@AnttiHaapala谢谢伙计,这太容易了。谢谢
1赞 Antti Haapala -- Слава Україні 9/30/2020
解释是 stackoverflow.com/q/45135/918959“链接器从左到右搜索,并随时记录未解析的符号。如果一个库解析了符号,它需要该库的目标文件来解析符号(在本例中为 b.o out of libb.a)“——但我在 C 中找不到干净的 MinGW 副本,而不是这些 Linux C++ 的 :D

答:

1赞 MaxC 9/30/2020 #1

正如评论中所建议的,颠倒作为参数传递的对象的顺序就足够了:

gcc -g -Wall -o test.exe ./test.o ./libtiff.lib