【发布时间】:2016-02-12 15:32:55
【问题描述】:
我是计算机科学专业的一年级学生,正在学习(以及其他)Makefile 课程。对于我们的第一个任务,我们必须创建一个共享库并针对它进行链接。
我有以下设置:
- 一个文件夹
hw1包含文件夹app和lib。 - 在
lib内部是一个名为libmine.so的文件,这是我要链接的库。 - 在
app内部,有两个文件:test.cpp和一个Makefile。前者使用libmine库。
Makefile 如下(在文件本身,缩进等。是正确的):
all: test
test: test.cpp
g++ -Wall -o test -L../lib -I../lib/include test.cpp -lmine
但是,当 运行 test 时,我得到了臭名昭著的 `libmine.so: cannot open shared object file' 错误。
我相信这与导出 LD_LIBRARY_PATH 有关。我试过这样做 (export LD_LIBRARY_PATH=$[very long relative path to the lib folder]),但我想在我的 Makefile 中这样做。另外,我不希望路径是相对的,因为当我将文件发送给他时,我的老师应该能够打开文件(所以我认为它应该类似于../lib/libmine.so)。
我查看了各种 StackOverflow 帖子,例如 this one,但似乎没有人回答这个特定问题(要么是设置不同,要么解决方案根本不起作用)。顺便说一句:将export LD_LIBRARY_PATH=../lib 行放在test: test.cpp 正下方和g++ 命令之前没有做任何事情。
非常感谢任何帮助:)
【问题讨论】:
-
只是要清楚,这不是完整的错误消息,当你尝试执行
test时会出现错误消息,而不是在你执行Make和build时出现@ 987654342@。那是对的吗?你有没有让test以不同的方式运行,例如通过在当前目录中添加libmine.so? -
是的,没错。问题是在 runtime 时找不到该库。
标签: makefile export shared-libraries shared-objects