链接/注册一个.so文件
Linking/Registering a .so File
我刚刚使用一个定制的第三方供应商提供的一些库编译了一个测试应用程序。没有安装/包管理器。应用程序按预期构建。然而,当我去运行它时,它似乎找不到一个必要的。so文件(我已经在同一目录下了):
[diego@localhost Debug]$ ls
esdcan libntcan.so.3 makefile objects.mk sources.mk src
[diego@localhost Debug]$ ./esdcan
./esdcan: error while loading shared libraries: libntcan.so.3: cannot open shared object file: No such file or directory
[diego@localhost Debug]$ ldd esdcan
linux-vdso.so.1 => (0x00007fff125ff000)
libntcan.so.3 => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000031d2600000)
libm.so.6 => /lib64/libm.so.6 (0x00000031c7600000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000031c8600000)
libc.so.6 => /lib64/libc.so.6 (0x00000031c7200000)
/lib64/ld-linux-x86-64.so.2 (0x00000031c6e00000)
我肯定我漏了一步,我只是完全不知道那一步是什么。
在构建完成后运行ldconfig
,并确保当前目录在您的/etc/ld.so.conf
文件中,以便当前目录是查找共享库的可信目录。
设置LD_LIBRARY_PATH
env变量为当前目录
[diego@localhost Debug]$ LD_LIBRARY_PATH=. ./esdcan
/etc/ld.so.conf File containing a list of colon, space, tab, new- line, or comma-separated directories in which to search for libraries.
也可以设置$LD_LIBRARY_PATH
环境变量
您可以将它复制到/usr/lib之类的地方(这有点侵入性),或者您可以尝试设置LD_LIBRARY_PATH=[包含libntcan.so的绝对(?)路径]。[3]:LD_LIBRARY_PATH before run .
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 如何在makefile中添加.c,.cc和.so文件以创建另一个.so
- Android NDK生成海量只有一个功能的.so文件
- 我应该把Boost.Python的.so文件放在哪里,这样我就可以把它作为一个模块导入,以及我如何将它与Python 2
- 在 Android 的第二个项目中添加一个 .so 库
- CMakeLists.txt有两个子项目和自己的CMakeLists.txt只需要创建一个.so库,该库包含所有子项目
- 如何创建一个仅包含 C 代码包装C++代码的 .so 文件 - 与 OpenCV 相关
- 从两个子目录中的代码创建一个 .so 文件
- 在另一个文件中链接/使用 .so 文件
- so文件:从另一个so文件调用的函数
- Java - 我有一个库(.a/.so)和header(.h),如何使用Java调用它们的函数?
- 使用Autotools生成一个.so文件
- 链接/注册一个.so文件
- 是否可以在Android Studio中使用.so作为输出构建一个本地模块
- 从Android NDK中的c++代码直接调用另一个.so文件中的函数