未明确引用'功能'

时间:2015-12-05 12:19:32

标签: c compilation cmake

我正在尝试编译一个.c文件(让我们调用这个(p2)),它使用另一个.c文件(p1)中的函数。我为(p1)创建了一个头文件,其中定义了所有函数。

此标题文件包含在(p2)中,在我的CMakeLists.txt中添加了以下行:

Did you hand edit your patch?
It does not apply to blobs recorded in its index.
Cannot fall back to three-way merge.
Patch failed at 0002 XXXXXXX
The copy of the patch that failed is found in:
   /xxxxxx/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

当我尝试使用# A2 set(SOURCES_A2 src/p2.c src/p1.h) add_executable(p2 ${SOURCES_A2}) 进行编译时,我得到make p2,其中message undefined reference to 'function'是来自(p1)的函数。我忘记在CMake文件中添加更多内容了吗?

如果您需要任何代码,我将不胜感激。只需说出来。

问候

1 个答案:

答案 0 :(得分:1)

未定义的引用意味着链接器无法在任何地方找到该函数。这通常意味着您忘记指定您所在的目标文件。如何使用gcc解决此问题的示例。

gcc -c -o p1.o p1.c
gcc -c -o p2.o p2.c
gcc -o program p1.o p2.o

第一步是将p1.c编译成目标文件,并且还没有链接它(-c)。第二步也是如此,但它编译p2.c.最后的步骤将创建的目标文件链接在一起,并创建最终的程序。

在您的情况下,您可以通过将src / p1.c添加到源中来将其添加到make命令中。你似乎忘了添加它:

set(SOURCES_A2
    src/p2.c
    src/p1.h
    src/p1.c)
add_executable(p2 ${SOURCES_A2})