我正在编写一个共享库,我编写了一个单元测试可执行文件。 我想在Makefile中创建一个目标,它将启动测试程序。
单元测试可执行文件链接到刚刚创建的库。
在Makefile中运行可执行文件时,我得到了
./starttest: error while loading shared libraries: libllist.so: cannot open shared object file: No such file or directory
哪种方式更适合解决此问题?
在Makefile中定义LD_LIBRARY_PATH
是这样的吗?
export LD_LIBRARY_PATH = $(CURDIR)/ lib
强制用户在运行测试之前安装库?
或者我错过了什么,甚至有更好的方法?
答案 0 :(得分:3)
我会使用选项#1,如果你想要的是通过makefile调用单元测试。绝对不应该使用选项#2,我也不喜欢选项#3。
第四种方法是使用-rpath
链接器选项构建单元测试程序,以将共享库的位置编码到单元测试程序中。例如,如果您使用GCC,则为:-Wl,-rpath=$(CURDIR)
。这允许从命令行调用单元测试,而不需要设置LD_LIBRARY_PATH等。
对于最终的二进制文件(将构建目录编码到它们中)这不是一个好主意,但是对于你不会在构建目录之外使用的单元测试二进制文件来说这很好。