【发布时间】:2017-03-06 16:53:00
【问题描述】:
+-CMakeLists.txt
|
+---Dir1
|- source_file1.c
|- CMakeLists.txt
+---Dir2
|- source_file2.c
|- CMakeLists.txt
+---Dir3
|- header_file.h
我有一个使用 cmake 创建的共享库 abc.so
这个库有 2 个未定义的名称:
U do_something1
U do_something2
这两者都在不同目录中的 Headerfile.h 中定义。该文件是 source_file1.c 和 source_file2.c 的 SOURCE_FILE 的一部分
但是我无法在库中解析未定义的符号!这太奇怪了。我做错了什么?
使用 -fPIC -rdynamic 编译代码。 由于某种原因 -Wl --export-all-symbols 出现编译器无法识别。编译器是 gcc 5.4.0
【问题讨论】:
-
both of which are defined in a Headerfile.h- dynamic 符号很少在 header 文件中定义。如果函数在头文件中定义,它通常使用static inline说明符。那么,在header_file.h中定义符号对您意味着什么? -
这两个函数是内联函数。我看到所有其他非内联函数都在 .so 中正确定义。我如何解决它?我不想让它们内联。添加静态内联说明符会修复它吗?
-
我删除了内联函数,现在直接用代码替换它。所以不能立即尝试。
-
如果
source_file1.c包含header_file.h,将do_something1函数定义为static inline,则该函数对于生成的库不应是“未知”的。