web-dev-qa-db-ja.com

.soおよび.aライブラリをMakefileに追加します

このような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

静的ライブラリの次のパスを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

これをどうやってやるの?.

12
rajat

/usr/local/lib/libYARP_OS.aについて考えてみましょう。

できることは、変数の1つとして-L/usr/local/lib/をメイクファイルに含めることです。そして、-lYARP_OSをLDLIBSに追加できます。

-Lはlibへのパスで、-lはここでのlibYARP_OS.a-lYARP_OSとして渡されるlib名です。

コマンドラインで次のようなことをします:gcc -o main main.c -L/usr/local/lib/ -lYARP_OS。これにより、アイデアが得られます。

16
Swair

-L<path>フラグを使用して、GCCにライブラリの場所を通知し、-l<libname>に含めることができます。たとえば、これは

$ gcc -o main main.c -L/usr/local/lib/ -lYARP_SO

swairで指摘されているように。

または、次のように、静的ライブラリのフルパスを指定して直接コンパイルすることもできます

$ gcc -o main main.c /usr/local/lib/libYARP_OS.a

詳細については、 「共有ライブラリと静的ライブラリ」 を参照してください。

特定のケースでは、LDLIBS=行に追加します。

注意:リンクの順序に注意してください。これは、プログラムをリンクするときに関係します。詳細については、 「ライブラリのリンク順」 を参照してください。例えば:

$ gcc -Wall calc.c -lm -o calc   (correct order)

働く

$ cc -Wall -lm calc.c -o calc    (incorrect order)
main.o: In function `main':
main.o(.text+0xf): undefined reference to `sqrt'

同様の質問も参照してください: Cの静的ライブラリにリンクする方法?

10
Tim

Makefileで、このように追加します

USER_LIBS = -lYARP_OS -lYARP_sig -lYARP_math -lYARP_dev -lYARP_name -lYARP_init

これにより、必要なライブラリがリンクされます

0
pauljames840