在我的项目中,我具有以下代码结构:
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
很重要,但是当我更改静态库的顺序(我将其指定为共享库文件的依赖项)时,我得到了另一个未定义的符号,这一次它表示一个静态成员找不到定义。
我nm
静态和动态库。该符号在静态库(simulatorcore.a)中用B
指定,在共享库(simulator.so)中用'U'指定。
实际上,当我用这样的目标文件指定共享库依赖项时,它运行良好:
SHLIB = simulator
SHLIB_DEPS_simulator = \
./core/SimulatorData.o \
...
但这是我的最后选择,所以我想为我的问题找到解决方案。
答案 0 :(得分:0)
以下提示可能会为您提供帮助: