C++ c++;在自定义目录中找不到共享库

C++ c++;在自定义目录中找不到共享库,c++,C++,我想在可执行文件中使用共享库(位于自定义目录中) 我已经创建了这个makefile all: SayHello SayHello: compiledObjects/SayHello.o myLib/libNames.so g++ compiledObjects/SayHello.o -o SayHello -Icommons -LmyLib -lNames compiledObjects/SayHello.o: SayHello.cpp g++ -c SayHello.cp

我想在可执行文件中使用共享库(位于自定义目录中)

我已经创建了这个makefile

all: SayHello

SayHello: compiledObjects/SayHello.o myLib/libNames.so
    g++ compiledObjects/SayHello.o -o SayHello -Icommons -LmyLib -lNames


compiledObjects/SayHello.o: SayHello.cpp
    g++ -c SayHello.cpp -o compiledObjects/SayHello.o

myLib/libNames.so: commons/Names.cpp commons/Names.h
    g++ -shared -fPIC commons/Names.cpp -o myLib/libNames.so
如果正确创建可执行文件和共享库,实际上我可以使用此命令执行程序

LD_LIBRARY_PATH=/custom/path/to/lib/myLib/libNames.so
./SayHello
如何在不指定LD\u LIBRARY\u路径的情况下执行
/SayHello


我没有使用任何IDE,我使用的是linux。

使用
-rpath
选项链接可执行文件。有关更多信息,请参阅
ld(1)
手册页

另外,您的makefile似乎有一个bug。如果成功地
make
您的程序,并立即再次运行
make
,看起来您的makefile将再次尝试重新编译程序,即使没有任何更改

毕竟,makefile的全部目的是避免进行不必要的编译


SayHello.o
构建目标应该是
compiledObjects/SayHello.o

您需要告诉g++使用
-Wl,-rpath
-rpath
选项传递给链接器。此外,还需要指定
-rpath
选项的路径

将所有这些放在一起,您的最后构建步骤应该如下所示:

SayHello: compiledObjects/SayHello.o myLib/libNames.so
    g++ compiledObjects/SayHello.o -o SayHello -Icommons -LmyLib -lNames -Wl,-rpath=/custom/path/to/lib/myLib/
相对路径: 如果要指定相对于二进制文件的RPATH,则应使用
$ORIGIN
作为占位符:
-rpath='$ORIGIN/rel/path'

谢谢,我现在已经修复了makefile(我已经更新了问题中的新版本)。对于-rpath选项,我遇到了一些问题。。。你能给我DOC的链接吗?我找不到。可能我错了,但此命令
g++编译对象/SayHello.o-o SayHello-Icommons-LmyLib-lNames-rpath
返回此错误:
g++:错误:无法识别的命令行选项“-rpath”
使用“man-ld”阅读ld的手册页。使用“mangcc”阅读gcc的手册页,即如何指示gcc将选项传递给链接器。学习如何查找和阅读技术文档是每个软件开发人员必须具备的一项必要技能。感谢您,今天我发现了一座金矿!!