我正在cygwin中创建一个exe和共享库。
库已经创建并且位于正确的位置,但是当我尝试编译客户端代码守护程序时,链接阶段表示它无法找到sysutil库。
错误发布在下面:
/usr/lib/gcc/i686-pc-cygwin/5.4.0/../../../../i686-pc-cygwin/bin/ld: cannot find -lsysutil
collect2: error: ld returned 1 exit status
make: *** [Makefile:84: daemon] Error 1
我尝试使用LD_LIBRARY_PATH
导出路径,但不幸的是,这也没有帮助。
daemon.c
#include <stdio.h>
#include <sys_util.h>
int main(){
sys_util();
while(1){
}
return 0;
}
sysutil.c
#include <stdio.h>
#include "sys_util.h"
int sys_util(){
return 0;
}
sysutil.h
int sys_util();
test.bat的
g++ -fpic -c sysutil.c
g++ -shared -o libsysutil.so sysutil.o -I.
g++ -c daemon.c -I.
g++ -o daemon.exe daemon.o -L. -lsysutil
del *.o
在c:/ test文件夹中生成共享库sysutil.so与源代码相同(daemon.c,sysutil.c,sys_util.h,test.bat,libsysutil.so)
Cygwin控制台输出: / cygdrive / C /测试 $ ./test.bat
C:\ test&gt; g ++ -fpic -c sysutil.c sysutil.c:1:0:警告:-fic被目标忽略(所有代码都与位置无关)
C:\ test&gt; g ++ -shared -o libsysutil.so sysutil.o -I。
C:\ test&gt; g ++ -c daemon.c -I。
C:\ test&gt; g ++ -o daemon.exe daemon.o -L。 -lsysutil c:/ mingw / bin /../ lib / gcc / mingw32 / 5.3.0 /../../../../ mingw32 / bin / ld.exe:找不到-lsysutil collect2.exe:错误:ld返回1退出状态
C:\ test&gt; del * .o
答案 0 :(得分:1)
Cygwin希望共享库具有.dll扩展名。
将批处理文件中的第二行更改为:
g++ -shared -o sysutil.dll sysutil.o -I.
查看用户&#39;更多信息指南: https://cygwin.com/cygwin-ug-net/dll.html