※ ChatGPTを利用し、要約された質問です(原文:MinGWのg++で分割コンパイルエラー)
MinGWのg++で分割コンパイルエラー
このQ&Aのポイント
MinGW環境でC++の勉強を始めました。ソースファイルを一括してコンパイルすると問題ないのですが、個別にコンパイルしようとするとエラーが出ます。解決策を教えてください。
g++を使用してMinGW環境でC++のコンパイルをしていますが、個別にコンパイルするとエラーが発生します。どうすれば解決できるでしょうか?
MinGWのg++を使用してC++のコンパイルを行っていますが、個別にコンパイルするとエラーが発生します。原因と解決策を教えてください。
MinGW環境でC++の勉強を始めました。
簡単なサンプルのコンパイルをしてみたのですが、ソースファイルを一括してコンパイルすると問題ないのですが、個別にコンパイルしようとするとエラーがでてしまいまいます。
原因や対処法をご存じの方がいらっしゃいましたらご教示下さい。
一括でコンパイルすると問題なし
bash-3.1$ g++ -Wl,--enable-auto-import main.cpp point.cpp -lstdc++
個別にコンパイルしようとした場合
bash-3.1$ g++ -Wl,--enable-auto-import -o main.o main.cpp
C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x16): undefined reference to `Point::Point()'
C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x32): undefined reference to `Point::Point(int, int)'
C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x3e): undefined reference to `Point::println()'
C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x4a): undefined reference to `Point::println()'
collect2: ld returned 1 exit status
※ -Wl,--enable-auto-importは、他の警告を消すために入れました、無くても質問の問題に変化はありませんでした。
サンプルソース
---main.cpp---
#include<iostream>
#include "point.h"
using namespace std;
int main(){
Point p1,p2(4,5);
p1.println();
p2.println();
return 0;
}
-----------
---point.h---
class Point {
private:
int x, y;
static int count;
public:
Point();
Point( int, int );
void set( int, int );
void println();
};
-------------
---point.cpp---
#include<iostream>
#include"point.h"
using namespace std;
int Point::count;
Point::Point(){
this->x = this->y = 0;
++count;
}
Point::Point(int ax, int ay){
this->x = ax;
this->y = ay;
++count;
}
void Point::set( int ax, int ay ){
this->x = ax;
this->y = ay;
}
void Point::println(){
cout << "Point(" << x << "," << y << ")" << endl;
}
-----------
bash-3.1$ g++ -v
Using built-in specs.
COLLECT_GCC=D:\MinGW\bin\g++.exe
COLLECT_LTO_WRAPPER=d:/mingw/bin/../libexec/gcc/mingw32/4.5.0/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.5.0/configure --enable-languages=c,c++,ada,fortran,obj
c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo
mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-r
untime-libs --disable-werror --build=mingw32 --pref
お礼
教えて頂いたとおり -cをつけて問題なくmain.oを作成、最終的に実行ファイルを作成することができました。 gcc についての挙動についても理解を深めることができました。 本当にありがとうございました。