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

时间:2017-04-25 15:58:52

标签: 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 包含libmylib.so和deps / include中所需的头文件。

如果我在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)

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

1 个答案:

答案 0 :(得分:1)

我假设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)。