我是一名帮助翻译的助手。以下是需要翻译的与IT技术相关内容:
我正在尝试将我的程序链接到共享库。我使用Makefile进行编译,它看起来像这样:
`make: sms_out.cpp SMSDispatch.cpp SMSDispatch.h
g++ -c -fPIC SMSDispatch.cpp -o SMSDispatch.o
g++ -shared SMSDispatch.o -o libSMSDispatch.so
` g++ sms_out.cpp -L. -lSMSDispatch -o sms_out
如果我在命令行窗口中运行该程序,则可以正常工作:
LD_LIBRARY_PATH="." ./sms_out
但我希望只需键入./sms_out
即可运行它,有人能帮忙吗?
尝试在makefile中添加export LD_LIBRARY_PATH=.
,但这没有起作用,当我尝试运行程序时,只得到错误消息“error while loading shared libraries: libSMSDispatch.so: cannot open shared object file: No such file or directory”。
LD_LIBRARY_PATH="." ./sms_out
或在运行程序之前使用export LD_LIBRARY_PATH=.
可以正常工作。但是,如果我尝试将export LD_LIBRARY_PATH=.
添加到Makefile中,在调用Makefile后运行程序时它却不能工作。你知道为什么吗? - VeronicLD_LIBRARY_PATH
的值:您不能像那样“导出”变量,该“导出”仅会影响运行脚本的进程。我不知道如何从makefile中修改环境变量(这并不是说不存在机制,只是我不知道)。如果您有一个包含“export”语句的脚本,可以通过像这样调用它来更改环境:$ . ./myexport.sh
- hmjdsms_out
之前设置库路径。您不喜欢从命令行设置LD_LIBRARY_PATH
的原因是什么? - hmjd.a
,而不是共享库,并将其静态链接到二进制文件中,避免修改LD_LIBRARY_PATH
。我知道这个问题是关于共享对象的,但只是想提一下。 - hmjd