2

.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    
4

0 に答える 0