问题描述
我正在 Conan 中打包 libA
共享库。它正确构建。我的 test_package
包正确复制了 libA.so
文件。
然后,当它运行时,柯南给了我错误
./example: erro rwhile loading shared libraries: libA.so.1: cannot open shared object file: No such file or directory
这是因为文件是libA.so
,而不是libA.so.1
。当我将 libA.so
重命名为 libA.so.1
并运行 ./example
时,整个事情都起作用了。
在 package_info
libA
的 conanfile.py
中,我确实有
self.cpp_info.libs = ["libA.so"]
我也试过
self.cpp_info.libs = ["A"]
但两者都不起作用。
如何让我的测试包查找 libA.so
而不是 libA.so.1
?
解决方法
我在打包步骤中做了这个
self.copy("*.h",dst="include",src="src",keep_path=False)
self.copy("*.so",dst="lib",keep_path=False)
tools.rename("src/libA.so","src/libsA.so.1")
self.copy("src/libA.so.1",keep_path=False)
libA
的 makefile 确实将 libA.so.1
设置为 soname。所以我复制了 .so
文件两次;一次为 .so
,一次为 .so.1
。 libA
附带的 makefile 没有生成自己的 .so.1
。这就是我需要复制的原因。我有一种感觉,这不是执行此操作的最佳方式,但确实有效。
更新:
现在我正在使用
self.copy("*.h",keep_path=False)
os.symlink("libA.so","libA.so.1")
self.copy("libA.so*",symlinks=True,keep_path=False)