我正在尝试在 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