为什么gcc找不到我的静态库?

sda*_*das 15 c gcc

我正在尝试将cspec库链接到我的C项目中.这是我的Makefile,位于tests文件夹中:

all: test

test: sample.o
    gcc -Wall -o test sample.o -L ../lib/cspec -llibcspec.a

sample.o: sample.c
    gcc -Wall -c sample.c -I../lib/cspec

clean:
    rm -rf *o test
Run Code Online (Sandbox Code Playgroud)

我的目录是:

/
/src
/lib
/lib/cspec
/tests
Run Code Online (Sandbox Code Playgroud)

当我运行make时收到以下错误:

gcc -Wall -o test sample.o -L ../lib/cspec -llibcspec.a
/usr/bin/ld: cannot find -llibcspec.a
Run Code Online (Sandbox Code Playgroud)

我已经确定libcs​​pec.a文件位于lib/cspec文件夹中,但是为了确保我也尝试将它放在tests文件夹中并删除-L命令,但无济于事.

Pau*_*l R 35

更改:

gcc -Wall -o test sample.o -L ../lib/cspec -llibcspec.a
Run Code Online (Sandbox Code Playgroud)

至:

gcc -Wall -o test sample.o -L ../lib/cspec -lcspec
Run Code Online (Sandbox Code Playgroud)

(按照惯例,gcc和其他*nix编译器会自动添加lib前缀和相应的后缀.)

  • 请注意,如果您碰巧在与“libcs​​pec.a”相同的目录中有一个“libcs​​pec.so”,您的命令将导致与“.so”库的链接。如果您确实想使用“.a”库,请使用“-l:cspec.a”。(请参阅 /sf/ask/460493911/。) (5认同)