質問

私は、セットのcppファイルがしたいコンパイルに直接バイナリをコンパイル共有ライブラリ。

していま

bin_PROGRAMS=mybin
lib_LTLIBRARIES=libmylib.la

COMMON_SOURCES=f1.cpp f2.cpp f3.cpp

mybin_SOURCES=main.cpp $(COMMON_SOURCES)
libmylib_la_SOURCES=$(COMMON_SOURCES)

私はこのcppファイルを作るには、一度バの一なく、時にはバ/automake苦情

Makefile.am: object `f1.$(OBJEXT)' created both with libtool and without`

ってCOMMON_SOURCES入。ファイルがバの苦情の場合のリンクを設定。します。ラスターの"はなポータブル.

何をしたいというように

bin_LTPROGRAMS=mybin

その作品が存在し

編集:解明-私が使っていautomake/autoconf.何をしていますが、お肉は私のautomake Makefile.am

役に立ちましたか?

解決

の問題は、その源を必要とするめっきにおいて共有オブジェクトのようにあたって、静的なアーカイブ;の場合には、例えば、 g++ 必要に -fPIC フラグ。

かを二つのbuildディレクトリが入っています。

このソース階層:

./src/Makefile.am
./src/f1.cpp
./src/f2.cpp
./src/f3.cpp
./src/main.cpp
./configure.ac
./Makefile.am

ときに使うようなことに ./src/Makefile.am:

bin_PROGRAMS = mybin
lib_LTLIBRARIES = libmylib.la

mybin_SOURCES = main.cpp
mybin_LDADD = libmylib.la

libmylib_la_SOURCES = f1.cpp f2.cpp f3.cpp

そのディレクトリを作成します ReleaseReleaseDisableShared./.ディレクトリ ./Release 走行す:

../configure && make

./ReleaseDisableShared 走行す:

../configure --disable-shared && make

建築後の各buildディレクトリを使用した mybin./ReleaseDisableShared/src/mybinlibmylib.so./Release/src/libmylib.so.

参照:

他のヒント

特に一般的なソースのライブラリをリンクます:

bin_PROGRAMS = mybin
lib_LTLIBRARIES = libmylib.la

mybin_SOURCES = main.cpp
mybin_LDADD = libmylib.la
libmylib_la_SOURCES = f1.cpp f2.cpp f3.cpp

libmylib.la端がmybinにリンクしてはならないファイルを使って、作成した場合は libtoolのコンビニエンスライブラリに、このようMakefile.amのものを使用します:

bin_PROGRAMS = mybin
noinst_LTLIBRARIES = libcommon.la
lib_LTLIBRARIES = libmylib.la

mybin_SOURCES = main.cpp
mybin_LDADD = libcommon.la

libmylib_la_SOURCES = f4.cpp f5.cpp f6.cpp
libmylib_la_LIBADD = libcommon.la

libcommon_la_SOURCES = f1.cpp f2.cpp f3.cpp

このはf1.cppf2.cppf3.cppf4.cppf5.cppf6.cpplibmylib.lamain.cppf1.cppf2.cppf3.cppmybinをリンクされます。

ターゲットはターゲットごとのCFLAGS(または類似)が含まれている場合、automakeは、そのターゲットを構築するための別のオブジェクトファイルを作成します。 mybinにいくつかのノーオペレーションのフラグを追加してみてください、何かます:

mybin_CPPFLAGS = -I.

または

mybin_CPPFLAGS = -DDUMMY -UDUMMY

あなたは、彼らが競合しないように、libtoolを別の拡張子で作成したオブジェクトファイルを与える必要があります。実際には、それらのファイルが再配置可能と非再配置可能なコードを使用して、両方のオブジェクトファイルのメタ情報を(これは-fPIC gccのコマンドライン引数で制御されている)を含むテキストファイルです。 libtoolのによって作成された実際のファイルは、通常「.LIBS」サブディレクトリに格納されています。基本的なメイクファイルは次のようになります。

CC = $(CXX)
LIBTOOL = libtool --quiet

SRC = lib.cpp test.cpp
LIB_SRC = lib.cpp $(SRC)
LIB_OBJ = $(LIB_SRC:.cpp=.lo)

EXE_SRC = exe.cpp $(SRC)
EXE_OBJ = $(EXE_SRC:.cpp=.o)

EXE = test
LIB = libmylib.la

all: $(EXE) $(LIB)

clean:
    $(RM) *.o *.lo $(EXE) $(LIB)

$(EXE): $(EXE_OBJ)

$(LIB): $(LIB_OBJ)
    $(LIBTOOL) --tag=CXX --mode=link $(LINK.cc) -shared -version-info 1:0 -rpath $(shell readlink -f .) -o $@ $< $(LDLIBS)

%.o: %.cpp
    $(COMPILE.cc) -o $@ $<

%.lo: %.cpp
    $(LIBTOOL) --mode=compile --tag=CXX $(COMPILE.cc) -o $@ $<
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top