我有一个我编写的 .cpp 代码,它是围绕商业软件程序编写的,他们提供了一个大的 C++ 库类供使用。我想将他们的一个共享对象静态链接libtdfdll.so
到我的可执行文件中。他们不向我提供一个libtdfdll.a
文件,而只是提供一个.so
文件。我在 SLES 11.4 中使用 g++ 4.8.3 执行此操作。
我的cpp文件是process_tdf_v12.5.cpp
这是我现在为有效的基本动态链接所做的事情:
g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include -L../tdflibs12.5/lib -ltdfdll -lm
这也适用于编译/链接:
g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include ../tdflibs12.5/libtdfdll.so -lm
但是当我运行我的可执行文件时我得到
error while loading shared libraries: libtdfdll.so.1: cannot open shared object file: No such file or directory
除非我做一个
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/ron/tdflibs12.5/lib
我不想这样做。
我希望我的一个可执行文件process_tdf_v12.5.cpp
包含特定版本的 12.5,tdflibs12.5/lib/libtdfdll.so
这样我就不需要将正确的 12.5 版本复制libtdfdll.so
到其他系统,也不必担心不同的 .so 版本会导致问题。我该怎么做呢?
如果我只得到一个 .so 文件,可以用它来完成静态链接吗?
我也不想静态链接其他任何东西,只是这个libtdfdll.so
文件