繁体   English   中英

运行cmake后未定义的引用错误

[英]undefined reference errors after running cmake

我试图用Cmake实际构建PhysFS库,我使用的是Code :: Blocks mingw makefile。 我可以在我的项目中导入,我可以在技术上声明PhysFS_init()函数(虽然这给我的参数错误太少)但是当我添加一个参数时它告诉我PHYSFS_init是一个未定义的引用。

这对我来说听起来很愚蠢,当你没有争论的时候你怎么能认出它,但是当我添加一个参数时假装它不存在? 我已经运行了两次CMake,但我只是得到了这个:

[...]\src\main.cpp|20|undefined reference to `PHYSFS_init'|

代码,如果有必要(只是一点,其余的是无关紧要的):

#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <iostream>
#include "Globals.h"
#include "GameStates.h"
#include "GameWindow.h"
#include "GameMenu.h"
#include <physfs.h>

int main(int argc, char** argv)
{
///<|===================| Classes & Declarations |===================|>
    sf::Event ev;
    sf::RenderWindow winMain ( sf::VideoMode( WindowWidth, WindowHeight, 32 ), WindowTitle );
    sf::Image Icon;
    GameStates gameState;
    GameMenu TitleMenu;
    MenuButton buttons[4];
    PHYSFS_init(NULL);

为什么会这样? 为了能够在我的项目中使用PhysFS,我该怎么办? 我用CMake构建了库,我包含了我需要的库,并且我尝试初始化PhysFS,这给了我一个错误,让我觉得C ++编译程序的方式很愚蠢。

这是C ++库如何工作的一般解释:

PHYSFS可能包含头文件和静态/动态库。 头文件是声明库的所有函数/类但未定义的位置。 因此,当您将头文件包含到项目中时,编译器现在可以知道您在库中调用的函数,以及它们采用的参数类型等。

因此,要使用库,必须包含其头文件,这意味着必须将其include目录添加到project / cmakelists.txt中。

#some similar path to this
include_directories( /path/to/PHYSFS/include)

现在,当您将可执行文件实际链接到二进制文件时,必须“解析”这些函数,以便链接器知道它们实际位置,以便可以调用它们。 这称为“链接”库。

因此,要使用库,您必须链接其库文件。

在cmake中,这完成如下:

add_executable(myexe myexe.cpp)

#Add library directory paths here
link_directories( /path/to/PHYSFSlibs/)

#libPHYS.a or libPHYS.so if using gcc convention, libPHYS.lib if MSVC convention
#cmake allows us to use the name of the library, instead of the filename to be portable.
target_link_libraries(myexe PHYSFS) 

我对PHYSFS并不是特别熟悉,但是如果你把它编译成一个库,你应该将这些文件中的一个链接到。

未定义的引用`PHYSFS_init

这是“链接”的问题,通常意味着您无法链接库,或者库缺少此函数的实现。 链接库应该解决这个问题。

编辑

我误解了你的问题,并假设你在项目中使用cmake并链接到PHYSFS。

首先,您必须单独构建PHYSFS,它将生成一个库文件(.a,.so或.lib),具体取决于平台/ IDE,然后您必须在C :: B链接器选项中链接该库文件。

去做这个:

转到项目 - >构建选项。 单击“链接器设置”。

图片(从这里 ): C :: B中的链接器设置

添加库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM