2017-03-06 116 views
0
+-CMakeLists.txt 
| 
+---Dir1 
    |- source_file1.c 
    |- CMakeLists.txt 
+---Dir2 
    |- source_file2.c 
    |- CMakeLists.txt 
+---Dir3 
    |- header_file.h 

我有使用cmake解决以.so未定义的符号在报头中定义的

abc.so创建一个共享库

这图书馆2点未定义的名称:

U do_something1 
U do_something2 

这两者都是在Headerfile.h中的一个不同的目录中定义。该文件是source_file1.c和source_file2.c的SOURCE_FILE的一部分。

但是,我无法获得在库中解析的未定义符号!这是超级奇怪的。我究竟做错了什么?

代码是用-fPIC -rdynamic编译的。 出于某种原因--Wl - 导出所有符号出现在编译器无法识别的位置。编译器是gcc 5.4.0

+1

'这两者在Headerfile.h'定义 - * *动态符号在**头很少定义* *文件。如果函数在头文件中被定义*,它通常使用'static inline'说明符。那么,通过在'header_file.h'中定义符号是什么意思? – Tsyvarev

+0

这两个函数是内联函数。我发现所有其他非内联函数都是在.so中定义的。我如何解决它?我不想让他们内联。会添加静态内联说明符修复它吗? – theCuriousOne

+0

我有点删除了内联函数,现在用代码直接替换它。所以不能立即尝试。 – theCuriousOne

回答

0

a。将内联函数声明为静态解决了问题。 b。如果C文件包括与静态连续头,其足够

感谢(@Tsyvarev)