簡體   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