有人可以帮我弄清楚这个错误。
我正在尝试编译测试程序并且它给出了这个错误
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/bin/ld: cannot find -ltest
。
我提供了正确的lib cc test.c -I"./include" -L"./Lib" -ltest
路径,但仍然是抛出错误。库位于上述文件夹中。
我在这里讨论过太多事情,但没有任何帮助。
答案 0 :(得分:0)
在Cygwin上,你应该能够构建一个库来生成适当的共享对象,例如:
gcc -shared -o libtest.so -Wl,--out-implib,libtest.dll.a libtest.c
libtest.c
将是您.c
文件的名称或用于构建图书馆的.c
文件列表。
这应该产生libtest.dll.a
和libtest.so
。您可以使用导入库将程序链接到共享对象。所以你可以用:
gcc test.c -I./include -LLib/ -ltest
Lib/libtest.dll.a
是一个库(导入库),它知道如何在运行时加载.so
文件。
要更像Windows,您可以删除.so
后缀并使用.dll
。因此,以这种方式编译共享对象也会起作用:
gcc -shared -o libtest.dll -Wl,--out-implib,libtest.dll.a libtest.c
然后像上面那样编译客户端(测试):
gcc test.c -I./include -LLib/ -ltest
因为您使用-o libtest.dll
编译了上面的共享对象,所以在您的程序执行时,创建的导入库现在将搜索libtest.dll
而不是libtest.so
。
请注意,在运行时,Windows会搜索共享对象(或dll)的路径。因此,您必须将共享对象(或dll)移动到运行应用程序的目录;或将您的共享对象(dll)复制到路径上的某个位置;或者将./Lib/
目录添加到您的路径中。