pyt*_*nic 29 c linux gcc x86-64
我有以下makefile
CXXFILES = pthreads.cpp
CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = -lpthread -ldl
all:
$(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS)
clean:
rm -f prog *.o
Run Code Online (Sandbox Code Playgroud)
我试图将./libmine
库包含在内CXXFLAGS
,但似乎它不是包含静态库的正确方法,因为当我编译程序时,我得到许多未定义的引用错误.那么实际上在makefile中包含静态库的正确方法是什么?
Aft*_*nix 45
使用
LDFLAGS= -L<Directory where the library resides> -l<library name>
Run Code Online (Sandbox Code Playgroud)
喜欢 :
LDFLAGS = -L. -lmine
Run Code Online (Sandbox Code Playgroud)
为了确保静态编译,您还可以添加
LDFLAGS = -static
Run Code Online (Sandbox Code Playgroud)
或者你可以摆脱整个库搜索,并直接与它链接.
说你有main.c fun.c
和一个静态库libmine.a
然后你可以在Makefile的最后一个链接行中做
$(CC) $(CFLAGS) main.o fun.o libmine.a
Run Code Online (Sandbox Code Playgroud)
oua*_*uah 15
CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = libmine.a -lpthread
Run Code Online (Sandbox Code Playgroud)
Jon*_*ler 12
确保该-L
选项出现在选项之前-l
; 链接器命令行中的选项顺序很重要,尤其是对于静态库.该-L
选项指定要搜索库(静态或共享)的目录.该-lname
选项指定一个库libmine.a
(静态)或libmine.so
(在大多数Unix版本上共享,但Mac OS X使用.dylib
和HP-UX使用.sl
).通常,静态库将在文件中libmine.a
.这是约定,不是强制性的,但如果名称不是libmine.a
格式,则不能使用-lmine
符号来查找它; 您必须在编译器(链接器)命令行上明确列出它.
该-L./libmine
选项是说"有一个名为的子目录libmine
可以搜索找到库".我可以看到三种可能性:
libmine.a
,在这种情况下你还需要添加-lmine
到链接器行(在引用库的目标文件之后).libmine
静态存档文件,在这种情况下,您只需将其列为./libmine
没有-L
前面的文件. libmine.a
在当前目录中有一个要拾取的文件.您可以写./libmine.a
或者-L . -lmine
两者都应该找到库.