2

我正在编写一个共享库,我已经编写了一个单元测试可执行文件。我想在 Makefile 中创建一个目标,它将启动测试例程。

单元测试可执行文件链接到刚才创建的库。

在 Makefile 中运行可执行文件时,我得到

./starttest: error while loading shared libraries: libllist.so: cannot open shared object file: No such file or directory

哪种方法更好地解决这个问题?

  1. LD_LIBRARY_PATH像这样从 Makefile 中定义?

    导出 LD_LIBRARY_PATH=$(CURDIR)/lib

  2. 强制用户在运行测试之前安装库?

  3. 不要从 Makefile 开始单元测试,用户会自己做。

或者也许我错过了一些东西,甚至有更好的方法?

4

1 回答 1

4

如果您只想通过 makefile 调用单元测试,我将使用选项 #1。绝对不应该使用选项#2,我也不喜欢选项#3。

第四种选择是使用-rpath链接器选项将共享库的位置编码到单元测试程序中来构建单元测试程序。例如,如果您使用 GCC,这将是:-Wl,-rpath=$(CURDIR). 这允许从命令行调用单元测试,而无需设置 LD_LIBRARY_PATH 等。

这对于最终的二进制文件(将您的构建目录编码到其中)不是一个好主意,但是对于您无论如何都不会在构建目录之外使用的单元测试二进制文件来说很好。

于 2013-07-14T18:30:42.960 回答