16

次のようなメイクファイルがあります。

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

これを行うにはどうすればよいですか。

4

4 に答える 4

21

あなたのを考えてみましょう/usr/local/lib/libYARP_OS.a

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

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

コマンド ラインでは、次のようにしますgcc -o main main.c -L/usr/local/lib/ -lYARP_OS。これはあなたにアイデアを与えるはずです。

于 2012-08-21T12:39:19.130 に答える
12

フラグを使用-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 で静的ライブラリにリンクするにはどうすればよいですか?

于 2012-08-21T12:45:20.787 に答える
6

に追加-lYARP_OS -lYARP_sig -lYARP_math -lYARP_dev -lYARP_name -lYARP_initLDLIBSます。

警告: リンクの順序が重要な場合があります。

/usr/local/libまた、それがライブラリを探す場所であることをリンカが認識していることを確認してください。そうでない場合は、指定してください (別の makefile 変数、たとえば、ライブラリ パスを含むようなもの-L/usr/local/libを追加できます)。LIBPATHS

libMyLib.a一般的な概要として、 folderにライブラリがある場合/my/pathgcc(またはg++) は次のパラメーターで呼び出すことができます。

gcc -L/my/path -lMyLib [...]
  • -Lリンカーがライブラリを探すパスを含めるために使用されます
  • -llib接頭辞と拡張子なしで渡す必要があるライブラリをリンクするために使用されます

この質問は、C および C++ でのライブラリの使用法を一般的に理解するのに役立つ場合があります: ライブラリの使用方法

于 2012-08-21T12:54:49.080 に答える