raj*_*jat 12 c++ makefile static-libraries
我有一个看起来像这样的makefile.
DEFINES=-std=c++0x
INCS_GTK=-I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gtk-2.0/gdk -I/usr/include/pango-1.0 -I/usr/lib/gtk-2.0/include -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include
INCS=-I/usr/include/freetype2 -I/usr/include/mysql -Iframeworks ${INCS_GTK}
LDLIBS=-lconfig++ -lcxcore -lcv -lGL -lGLU -lglut -lhighgui -lSDL -lftgl -lueye_api -lboost_filesystem -lboost_system -lann -lpthread -lflycapture -lglog -lmysqlpp -lmysqlclient -lunittest++
DEBUG=-g -pg
WARNINGS=-Wall -Wextra -pedantic -Wno-long-long #-O3 -Weffc++
BUILDDIR=build
BINDIR=dist
MAINCXX=${shell find -name '*.cxx'}
TARGETS=${MAINCXX:%.cxx=%}
CXXFLAGS=${DEBUG} ${WARNINGS} ${DEFINES} ${INCS}
LDFLAGS=${DEBUG} ${WARNINGS} ${DEFINES}
include IDEconfigs/Makefile/generic.mk
Run Code Online (Sandbox Code Playgroud)
我想将以下静态库路径添加到makefile中.
/usr/local/lib/libYARP_OS.a /usr/local/lib/libYARP_sig.a /usr/local/lib/libYARP_math.a /usr/local/lib/libYARP_dev.a /usr/local/lib/libYARP_name.a /usr/local/lib/libYARP_init.a
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢
Swa*_*air 16
让我们考虑你的/usr/local/lib/libYARP_OS.a.
你可以做的是,-L/usr/local/lib/在你的makefile中作为变量之一.然后你可以-lYARP_OS附加到LDLIBS.
-L用于lib的路径,-l是lib名称,这里libYARP_OS.a将传递为-lYARP_OS.
在命令行上,您将执行以下操作:gcc -o main main.c -L/usr/local/lib/ -lYARP_OS.这应该给你一个想法.
Tim*_*Tim 10
您可以使用-L<path>标志告诉GCC任何库的位置,然后将其包含在内-l<libname>.例如,这将是
$ gcc -o main main.c -L/usr/local/lib/ -lYARP_SO
Run Code Online (Sandbox Code Playgroud)
如swair所述.
或者,您也可以提供静态库的完整路径并直接编译,例如
$ gcc -o main main.c /usr/local/lib/libYARP_OS.a
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅"共享库和静态库".
在您的具体情况下,我会将它们添加到该LDLIBS=行.
注意:小心链接顺序,这在将程序链接在一起时是相关的.有关详细信息,请参阅"库的链接顺序".例如:
$ gcc -Wall calc.c -lm -o calc (correct order)
Run Code Online (Sandbox Code Playgroud)
作品
$ cc -Wall -lm calc.c -o calc (incorrect order)
main.o: In function `main':
main.o(.text+0xf): undefined reference to `sqrt'
Run Code Online (Sandbox Code Playgroud)
另请参阅此类似问题:如何链接到C中的静态库?
附加-lYARP_OS -lYARP_sig -lYARP_math -lYARP_dev -lYARP_name -lYARP_init到LDLIBS.
警告:链接顺序可能很重要.
此外,请确保链接器知道这/usr/local/lib是一个查找库的位置,否则指示它-L/usr/local/lib(您可以添加另一个makefile变量,例如LIBPATHS或类似的东西,以包含库路径).
作为一般概要,如果libMyLib.a文件夹中有库/my/path,则可以使用以下参数调用gcc(或g++):
gcc -L/my/path -lMyLib [...]
Run Code Online (Sandbox Code Playgroud)
-L 用于包含链接器将查找库的路径-l用于链接库,必须在没有lib前缀和扩展名的情况下传递这个问题可能有助于大致了解C和C++中的库使用:如何使用库