.so
で書かれた Linux ( ) で動的ライブラリをコンパイルしようとしていますC++
。
Microsoft Visual Studio 2008 との互換性の問題があるため、ライブラリ コード内で Boost ライブラリによるマルチスレッドを処理します。
ライブラリをコンパイルするときは、-lboost_thread
フラグを使用します。
コンパイルはエラーなしで終了しますが、Boost ライブラリがリンクされていないようです:
ldd myLib.so.1.0
linux-vdso.so.1 => (0x00007fffe81ff000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2e9ad43000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2e9aa47000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2e9a830000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e9a471000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2e9b348000)
さらに、アプリケーション内にライブラリをロードしようとすると、次のエラーが発生します。
undefined symbol: _ZTIN5boost6detail16thread_data_baseE
誰かヒントを教えてくれませんか?
詳細が必要な場合はお尋ねください。
ありがとうございました。
#編集:これが私のライブラリの構築方法です
CC=g++ -c
CFLAGS=-I./acml530_amd64/ifort64_mp/include/ -I/usr/lib/jvm/java-7-oracle/include -I/usr/lib/jvm/java-7-oracle/include/linux
LFLAGS=-L./acml530_amd64/ifort64_mp/lib -lacml_mp -lboost_thread
OUTPUT_DIR=./build/
./svdlibc/las2.o: ./svdlibc/las2.cpp
$(CC) -c -w -fPIC -o $(OUTPUT_DIR)las2.o $< $(CFLAGS) $(LFLAGS)
./svdlibc/svdlib.o: ./svdlibc/svdlib.cpp
$(CC) -c -w -fPIC -o $(OUTPUT_DIR)svdlib.o $< $(CFLAGS) $(LFLAGS)
./svdlibc/svdutil.o: ./svdlibc/svdutil.cpp
$(CC) -c -w -fPIC -o $(OUTPUT_DIR)svdutil.o $< $(CFLAGS) $(LFLAGS)
%.o: %.cpp
$(CC) -c -fPIC -o $(OUTPUT_DIR)$@ $< $(CFLAGS) $(LFLAGS)
compile_lib: Native.o Repository.o ArrayUtilTest.o FeatureToGene.o javaAnnotationItemWrapper.o javaAnnotationRetrieverWrapper.o javaDecompositionResponseWrapper.o javaPredictionResponseWrapper.o JavaRelationshipItemWrapper.o javaRelationshipRetrieverWrapper.o JavaRequestWrapper.o javaSimilarityRetrieverWrapper.o javaValidationResponseWrapper.o ./svdlibc/las2.o ./svdlibc/svdlib.o ./svdlibc/svdutil.o StopWatchUtil.o
g++ -shared -lboost_thread -lgomp -Wl,-soname,biocpp.so.1 -o biocpp.so.1.0 $(OUTPUT_DIR)*.o