2

我正在尝试在 Linux ( .so) 上编译一个动态库,用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