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都在同一目录中。

这是正确的程序吗?

编辑:

解决了以下CMakeLists文件。

FILE (GLOB_RECURSE json_data_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp) SET (json_data_LIBS ${PROJECT_NAME} ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) ADD_EXECUTABLE (json_data ${json_data_SRCS}) add_library(utils utils.c) set(HEADER_FILES utils.h) TARGET_LINK_LIBRARIES (json_data ${json_data_LIBS} utils) INSTALL (TARGETS json_data DESTINATION bin)

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.