Visual Studio 2010 IDE でコンパイルされた動作中の C++ ライブラリを、任意の標準コンパイラでコンパイル可能な汎用プロジェクトに変換しようとしました。Ubuntu 12.10 で Eclipse C++ IDE を使用してコンパイルできたので、その目的は明らかに成功しています。
それ以来、端末で g++ と Makefile を使用して同じものをコンパイルしようとしました。残念ながら、私は同じ成功を収めていません。私はこれらのエラーしか受け取っていないので、良いコンパイルにかなり近づいているようです:
./liborbit.a(cOrbit.o): In function `Zeptomoby::OrbitTools::cEci::ScalePosVector(double)':
/home/tufts/Programs/workspace/orbitTools/Demo/../core/cEci.h:35: undefined reference to `Zeptomoby::OrbitTools::cVector::Mul(double)'
./liborbit.a(cOrbit.o): In function `Zeptomoby::OrbitTools::cEci::ScaleVelVector(double)':
/home/tufts/Programs/workspace/orbitTools/Demo/../core/cEci.h:36: undefined reference to `Zeptomoby::OrbitTools::cVector::Mul(double)'
./liborbit.a(cNoradBase.o): In function `Zeptomoby::OrbitTools::cNoradBase::FinalPosition(double, double, double, double, double, double, double, double)':
/home/tufts/Programs/workspace/orbitTools/Demo/../orbit/cNoradBase.cpp:265: undefined reference to `Zeptomoby::OrbitTools::cVector::Magnitude() const'
/home/tufts/Programs/workspace/orbitTools/Demo/../orbit/cNoradBase.cpp:285: undefined reference to `Zeptomoby::OrbitTools::cEciTime::cEciTime(Zeptomoby::OrbitTools::cVector const&, Zeptomoby::OrbitTools::cVector const&, Zeptomoby::OrbitTools::cJulian)'
collect2: ld returned 1 exit status
make: *** [compile] Error 1
ライブラリ関数はライブラリ関数自体をorbit使用しているようです。core
ファイル システムの編成:
orbitTools/
├── core
│ ├── cEci.cpp
│ ├── cEci.h
│ ├── cJulian.cpp
│ ├── cJulian.h
│ ├── coord.cpp
│ ├── coord.h
│ ├── coreLib.h
│ ├── cSite.cpp
│ ├── cSite.h
│ ├── cTle.cpp
│ ├── cTle.h
│ ├── cVector.cpp
│ ├── cVector.h
│ ├── exceptions.h
│ ├── globals.cpp
│ ├── globals.h
│ ├── stdafx.cpp
│ └── stdafx.h
├── Demo
│ ├── main.cpp
│ └── Makefile
└── orbit
├── cNoradBase.cpp
├── cNoradBase.h
├── cNoradSDP4.cpp
├── cNoradSDP4.h
├── cNoradSGP4.cpp
├── cNoradSGP4.h
├── cOrbit.cpp
├── cOrbit.h
├── stdafx.cpp
└── stdafx.h
のローカライズに注意してくださいMakefile。
Makefile 自体は次のとおりです。
# コンパイラ
CC = g++
# ファイル ディレクトリを含める
メイン = $(PWD)/..
COMPILE = $(MAIND)/コンパイル
コア = $(MAIND)/コア
ORBIT = $(MAIND)/軌道
INCLUDE = -I$(メイン) -I$(コア) -I$(オービット) -I.
# 開発オプション
CFLAGS = -g -ansi
コンパイル: main.o ライブラリ
$(CC) $(INCLUDE) $(CFLAGS) main.o -L. -lcore -lorbit -lm -o デモ
main.o:
$(CC) $(INCLUDE) $(CFLAGS) -c main.cpp
# コア ライブラリ
cEci.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/cEci.cpp
cJulian.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/cJulian.cpp
coord.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/coord.cpp
cSite.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/cSite.cpp
cTle.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/cTle.cpp
cVector.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/cVector.cpp
globals.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/globals.cpp
stdafx.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(CORE)/stdafx.cpp
コア: cEci.o cJulian.o coord.o cSite.o cTle.o cVector.o globals.o stdafx.o
ar rcs libcore.a cEci.o cJulian.o coord.o cSite.o cTle.o cVector.o globals.o stdafx.o
# 軌道ライブラリ
cNoradBase.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(ORBIT)/cNoradBase.cpp -lcore
cNoradSDP4.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(ORBIT)/cNoradSDP4.cpp -lcore
cNoradSGP4.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(ORBIT)/cNoradSGP4.cpp -lcore
cOrbit.o:
$(CC) $(INCLUDE) $(CFLAGS) -c $(ORBIT)/cOrbit.cpp -lcore
軌道: cNoradBase.o cNoradSDP4.o cNoradSGP4.o cOrbit.o stdafx.o
ar rcs liborbit.a cNoradBase.o cNoradSDP4.o cNoradSGP4.o cOrbit.o stdafx.o
ライブラリ: コア軌道
掃除:
rm *.o
パージ:
rm *.a