C ++对“函数”的未定义引用[关闭]

问题描述 投票:-1回答:1

我在使用make和c ++ 14编译程序时遇到问题

我有三个文件:

main.cpp
utils.h
utils.c

在main.cpp内部,我有:

#include "utils.h"
uint64_t ToolLists::GetAddress(const char* name)
{
    MyObject object;
    return ::FindTest(object, name); //(also tried without ::)
}

Inside utils.h:

uint64_t FindTest(const MyObject object, const char* procName);

内部utils.c:

uint64_t FindTest(const MyObject exports, const char* procName)
{
    return 0;
}

但是在编译时出现以下错误,我真的不明白为什么:

/usr/bin/ld: CMakeFiles/data.dir/main.cpp.o: in function `ToolLists::GetAddress(char const*)':main.cpp:(.text+0x121): undefined reference to `FindTest'

我的代码有什么问题?

感谢您的任何帮助。

编辑:

我想做的是:

将我的C代码集成到该项目内的json_data下:https://github.com/meltwater/served

在示例中,您可以找到json_data。和main.cpp文件。

在main.cpp内,我已将调用添加到C函数中,并且还在其中复制了utils.h和utils.c。

make文件是通过服务的/根目录生成的(此命令还可以编译项目):

mkdir build && cd build && cmake.. && make

也我的utils.h文件已经有这个了:

#ifdef __cplusplus
extern "C" {
#endif // 
etc.... 

编辑:

这是我正在使用的cmakelist:

https://github.com/meltwater/served/blob/master/src/examples/json_data/CMakeLists.txt

我已经在“ TARGET_LINK_LIBRARIES(json_data $ {json_data_LIBS})”之后编辑了包括这两行代码的代码:]

add_library(utils utils.c)
target_include_directories(utils PUBLIC utils.h)

utils.c和utils.h都在同一目录中。

这是正确的程序吗?

c++ linux makefile cmake
1个回答
0
投票

C ++用有关其参数的类型信息装饰功能名称。

如果要从C ++调用C语言中定义的函数,则必须使用extern“ C”(how does extern "C" work)。

尝试将标题更改为

...
#ifdef __cplusplus
extern "C"
{
#endif

// declarations of the functions you want to define in c

#ifdef __cplusplus
}
#endif
...
© www.soinside.com 2019 - 2024. All rights reserved.