1

我无法链接到我的 .so

[0] [ishpeck@yoshimitsu segfaulty]$ cat Makefile 
all: ishy_crashy.so main.c
    gcc -L. -lishy_crashy -o crashy main.c

ishy_crashy.so: libby.h libby.c
    gcc -fPIC -shared -Wl,-soname,ishy_crashy -o ishy_crashy.so libby.c
[0] [ishpeck@yoshimitsu segfaulty]$ make
gcc -fPIC -shared -Wl,-soname,ishy_crashy -o ishy_crashy.so libby.c
gcc -L. -lishy_crashy -o crashy main.c
/usr/bin/ld: cannot find -lishy_crashy
collect2: error: ld returned 1 exit status
make: *** [all] Error 1
[2] [ishpeck@yoshimitsu segfaulty]$ file ishy_crashy.so 
ishy_crashy.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x0bcbdf5d7d1b88222ee057c014c906cd9fdd859d, not stripped
[0] [ishpeck@yoshimitsu segfaulty]$ echo $LD_LIBRARY_PATH

[0] [ishpeck@yoshimitsu segfaulty]$ export LD_LIBRARY_PATH=.:`pwd`:/lib:/usr/lib:/usr/local/lib
[0] [ishpeck@yoshimitsu segfaulty]$ make
gcc -L. -lishy_crashy -o crashy main.c
/usr/bin/ld: cannot find -lishy_crashy
collect2: error: ld returned 1 exit status
make: *** [all] Error 1
[2] [ishpeck@yoshimitsu segfaulty]$ ls
ishy_crashy.so  libby.c  libby.h  main.c  Makefile
[0] [ishpeck@yoshimitsu segfaulty]$ echo $LD_LIBRARY_PATH
.:/tmp/segfaulty:/lib:/usr/lib:/usr/local/lib

我错过了什么?

4

2 回答 2

1

因为库的命名约定是有前缀lib. 标准工具明白这一点,因此-lxyz寻找一个名为libxyz.so/的库libxyz.a

于 2013-05-31T15:15:56.873 回答
1

该参数的-lishy_crashy意思是寻找libishy_crashy.solibishy_crashy.a。您缺少lib库文件名的前缀。

于 2013-05-31T15:16:09.240 回答