3

ゲームの 1 つを Linux に移植する作業を行っていますが、受け取ったエラーの理由がわかりません。このゲームはもともと Visual Studio 2010 で作成されたもので、必要なコンテンツ (ヘッダー、cpp、テクスチャ) をすべて抽出し、コンパイルしようとしています。

を使用したファイルのコンパイルはg++ -c -o exampleFile.o exampleFile.cpp、エラーなしで正常に動作します。ただし、リンクすると、標準関数に関する何百ものエラーが発生します。例:

Bmp.o: In function `Image::Bmp::Bmp()':
Bmp.cpp:(.text+0x58): undefined reference to `std::allocator<char>::allocator()'
Bmp.cpp:(.text+0x74): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
Bmp.cpp:(.text+0x80): undefined reference to `std::allocator<char>::~allocator()'
Bmp.cpp:(.text+0x91): undefined reference to `std::allocator<char>::~allocator()'

完全な出力はPasteBinにあります

Bmp.cppファイルは他の誰かによって書かれたライブラリ関数です。ここで見つけることができます。上記のコードは次のとおりです。

#include <fstream>
#include <iostream>
#include <cstring>
#include "Bmp.h"
using std::ifstream;
using std::ofstream;
using std::ios;
using std::cout;
using std::endl;
using namespace Image;

///////////////////////////////////////////////////////////////////////////////
// default constructor
///////////////////////////////////////////////////////////////////////////////
Bmp::Bmp() : width(0), height(0), bitCount(0), dataSize(0), data(0), dataRGB(0),
         errorMessage("No error.")
{
}

Bmp::Bmp(const Bmp &rhs)
{
    // copy member variables from right-hand-side object
    width = rhs.getWidth();
    height = rhs.getHeight();
    bitCount = rhs.getBitCount();
    dataSize = rhs.getDataSize();
    errorMessage = rhs.getError();

    if(rhs.getData())       // allocate memory only if the pointer is not NULL
    {
        data = new unsigned char[dataSize];
        memcpy(data, rhs.getData(), dataSize); // deep copy
    }
    else
        data = 0;           // array is not allocated yet, set to 0

    if(rhs.getDataRGB())    // allocate memory only if the pointer is not NULL
    {
        dataRGB = new unsigned char[dataSize];
        memcpy(dataRGB, rhs.getDataRGB(), dataSize); // deep copy
    }
    else
        dataRGB = 0;        // array is not allocated yet, set to 0
}

問題が何であるかはよくわかりませんが、リンカーが std 関数に到達できないと思いますか? 助けてくれてありがとう。

リンクの編集コマンド:gcc -o LDTux Bmp.o character.o chickenList.o chicken.o farmList.o farm.o fieldList.o field.o generall_utils.o landscape.o object.o SZ_NumberList.o SZ_Sprite.o worm.o wormList.o wormSpawn.o wormSpawnList.o GameWorld.o HelloOpenGL.o -lGL -lglut -lm

4

2 に答える 2

26

As pointed out earlier by Dietmar Kühl in the comments, you should change the linker command from gcc to g++.

于 2013-09-25T22:50:49.177 に答える
3

As pointed out by Dietmar Kühl in the comments, I was using gcc to link, rather than g++.

Upon amending the linking command, I received ...undefined reference to 'gluLookAt' which was fixed by adding -lGLU.

于 2013-09-25T22:51:01.750 に答える