【发布时间】:2020-01-10 04:56:40
【问题描述】:
在我的项目中,我的代码结构如下:
src/
simulator/
core/
gui/
...
我在 Linux 上。我需要为simulator 文件夹创建一个共享库,该文件夹应包含来自core 和gui 文件夹的静态库; simulator.so = simulatorcore.a + simulatorgui.a + ....
我正在使用某种自定义格式的 makefile,这就是我指定依赖项的方式:
simulator/Makefile.make - 应该生成共享库
SHLIB = simulator
SHLIB_DEPS_simulator = \
src/simulator/core/lib_simulatorcore \
src/simulator/gui/lib_simulatorgui
...
simulator/core/Makefile.make - 应该生成静态库
LIB = simulatorcore
LIB_DEPS_simulatorcore = \
SimulatorData.o \
...
代码编译但我得到这个错误:
libsimulator.so:未定义符号:_ZTIN9simulator4core9someClassE
我知道链接顺序对gcc 很重要,但是当我更改静态库的顺序(我指定为共享库文件的依赖项)时,我得到另一个未定义的符号,这一次它说静态成员定义是没找到。
我nmed 静态和动态库。该符号在静态库 (simulatorcore.a) 中使用 B 指定,在共享库 (simulator.so) 中使用“U”指定。
实际上,当我使用这样的目标文件指定共享库依赖项时,它可以正常工作:
SHLIB = simulator
SHLIB_DEPS_simulator = \
./core/SimulatorData.o \
...
但这是我最后的手段,所以我想为我的问题找到一个解决方案。
【问题讨论】:
标签: linux dependencies shared-libraries static-libraries linker-errors