我正在尝试编译一个.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文件中添加更多内容了吗?
如果您需要任何代码,我将不胜感激。只需说出来。
问候
答案 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})