cygwin:链接器找不到共享库

时间:2017-02-24 10:31:08

标签: cygwin

我正在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

1 个答案:

答案 0 :(得分:1)

Cygwin希望共享库具有.dll扩展名。

将批处理文件中的第二行更改为:

g++ -shared -o sysutil.dll sysutil.o -I.

查看用户&#39;更多信息指南:   https://cygwin.com/cygwin-ug-net/dll.html