【发布时间】:2020-12-15 12:36:58
【问题描述】:
我有一个简单的 C 库,其中包含以下文件: /testlib/library.h /testlib/library.lib
library.h 包含:
#ifdef __cplusplus
extern "C" {
#endif
void function(int a, int b);
#ifdef __cplusplus
}
#endif
我正在尝试在我的 main.cpp 中使用此标头:
extern "C" {
#include "library.h"
}
int main()
{
function(1, 2);
return 0;
}
这是我的 CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(StudyProject)
include_directories(testlib/)
link_directories(testlib/)
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/testlib/)
我使用 Qt Creator(Windows 平台,MinGW 7.3.0),它使用以下命令构建项目:
cmake.exe --build . --target all
但我在链接时遇到以下错误:
undefined reference to 'function'
谁能帮助我我做错了什么?
【问题讨论】:
-
library.cpp的内容是什么?链接器错误表明您没有在库中实现该函数或没有链接到它。 -
@Zaiborg,我无权访问库源代码。但我保证它具有所有功能实现,因为 Microsoft Visual C++ 2008 在我添加此库时成功编译项目
-
为什么在
#include "library.h"周围有extern "C" { }?您已经拥有extern "C" { }inlibrary.h. -
您可以通过
dumpbin查看library.lib提供的内容。 SO: How to See the Contents of Windows library (*.lib) -
您不需要指定链接到的库的名称,例如
target_link_directories(${PROJECT_NAME} library)(其中library是库文件的基本名称)?