在 C++ 中隐式的使用.so 动态库
在 archlinux 上成功实现了隐式调用动态库.
虽然遇到了一些小问题, 但是在网络搜索引擎的帮助下, 成功解决.
主要代码
myadd.cpp 和 myadd.h
1 | // myadd.h |
1 | // myadd.cpp |
使用 g++ -fPIC -shared myadd.cpp -o libmyadd.so
来编译 myadd.cpp
成动态库libmyadd.so
main.cpp
1 | // main.cpp |
使用 g++ main.cpp -L. -lmyadd && ./a.out
获得如下输出
-L. -lmyadd
参数的意思是在 ./
目录去寻找libmyadd.so
1
./a.out: error while loading shared libraries: libmyadd.so: cannot open shared object file: No such file or directory
动态库的隐式调用失败.
寻找问题发生的原因
为什么 g++ main.cpp -L. -lmyadd
这条命令成功的在 ./
当前目录找到了动态库并且编译连接, 但是运行时, 却找不到动态库呢?
这是由于在编译链接期间, 其找寻 .so
是根据 -L
和默认的 /usr/lib
, /lib
和LIBRARY_PATH
而在运行期间, 寻找 .so
是根据 /usr/lib
,/lib
和LD_LIBRARY_PATH
解决问题
1 | 先临时的把当前目录 /path/to/test/ 添加到 LD_LIBRARY_PATH |
成功获得输出1
add(1, 2) = 3
成功完成动态库的隐式调用.
目录结构
1 | test/ |
待解决的问题
那么怎样完美的解决动态库路径这个问题呢?
见我的这篇文章 在 Linux 中完美的使用 .so 动态库