我在使用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 ++用有关其参数的类型信息装饰功能名称。
如果要从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
...