c++ - 在 Ubuntu 上构建库,在 Arch 上的项目中使用它 - 不构建

标签 c++ linux g++

我正在 Ubuntu 14.04.5 上构建一个动态库,它依赖于一些静态库(Boost 和 OpenSSL)。

如果我在另一台 Ubuntu 机器上的项目中使用这个库,它可以完美运行。但是,如果我构建它并在 Arch 机器 (Antergos) 上的项目中使用它,它会在构建过程中显示以下内容:

main.cpp.o: In function `init()':
main.cpp:(.text+0xf8): undefined reference to `Util::generateString[abi:cxx11](int)'

我正在使用以下内容构建我的项目:

g++ -Ldeps -Ideps/include main.cpp -lmylib

deps 在 deps/include 中包含 libmylib.so 和所需的头文件。

如果我在 Ubuntu 上的 mylib.so 上运行 ldd,我会得到以下信息:

linux-vdso.so.1 =>  (0x00007ffdd24cf000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f10b2f97000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10b2c91000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f10b2a73000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10b26ab000)
/lib64/ld-linux-x86-64.so.2 (0x00007f10b3ff3000)

如果我在 Antergos 上的 mylib.so 上运行 ldd,我会得到以下信息:

linux-vdso.so.1 (0x00007ffcce115000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f5a42fef000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f5a42cdc000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f5a42abe000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5a4271a000)
/usr/lib64/ld-linux-x86-64.so.2 (0x000055ced49a7000)

我可能错过了一些简单的东西,但我似乎无法让它发挥作用。我做错了什么?

最佳答案

我假设 Util::generateString[abi:cxx11](int) 是您的 libmylib.so 库导出的函数?如果是这样,您可能需要先重新编译该库,然后重新尝试编译/链接 main.cpp。

我建议这样做是为了确保每个组件所链接的 c++ 标准库是同一版本。看起来 libmylib.so 是针对 c++11 标准库编译的,您需要确保 main.cpp 与之匹配。您始终可以使用 --std= 选项指定要链接的对象(例如 --std=c++11--std=c++0x, --std=c++17).

关于c++ - 在 Ubuntu 上构建库,在 Arch 上的项目中使用它 - 不构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43615643/

相关文章:

linux - 什么是ARM安全模式下的分区检查器

c++ - g++ 生成依赖文件缺少用户定义的 header

c++ - 将结构和类写入磁盘

c++ - Eigen 稀疏矩阵中非零元素的数量 - 二元运算符不变

linux - 添加对用户 ubuntu - 共享文件夹 cifs-utils 的写入权限

Linux 内核系统调用返回 -1 而不是 {-1, -256}

c++ - 当 double 为常量时,为什么 g++ -Wconversion 不警告将 double 转换为 long int?

c++ - 如果我只想指定一个哈希函数,我应该将什么传递给 unordered_map 的存储桶计数参数?

c++ - 内存碎片分析器

python - 定义了新 python 类型的 PyDev 外部调试?