【发布时间】:2014-09-05 15:39:36
【问题描述】:
我有一个共享库,我用它来创建一个可执行的二进制文件。我只能控制库和可执行二进制文件的构建过程,而不能控制所涉及的源文件。正如预期的那样,可执行二进制文件中的源文件引用了库中的许多函数。
目前共享库是直接使用 objectfiles(.o) 构建的。
g++ -shared ${OBJECT_FILES} -o ${SHARED_LIBRARY}
我也想通过将目标文件分组到静态库(.a 文件或档案)中来发布目标文件。
为了节省空间,我在创建存档文件时删除了所有 .o 文件。所以现在,构建命令是
g++ -shared ${ACRCHIVE_FILE} -o ${SHARED_LIBRARY}
图书馆建设良好。
但是,当我尝试通过链接到此共享库来构建可执行二进制文件时,二进制文件引用的符号未定义并且无法链接。 (未定义对Context::Get()的引用)
根据我的理解,我们是直接使用 .o 文件还是使用包含所有 .o 文件的存档创建共享库,但这显然是不可能的,或者我可能遗漏了一些东西。
【问题讨论】:
-
你试过用 g++ -shared -Wl,--no-undefined ${OBJECT_FILES} -o ${SHARED_LIBRARY} 构建吗?也可以通过添加 -Wl,-soname,
> ?
标签: c++ g++ linker-errors