我试图将在 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)/.. 编译 = $(主)/编译 核心 = $(主)/核心 轨道 = $(主)/轨道 包括 = -I$(主)-I$(核心)-I$(轨道)-I。 # 发展选项 CFLAGS = -g -ansi 编译:main.o 库 $(CC) $(INCLUDE) $(CFLAGS) main.o -L。-lcore -lorbit -lm -o 演示 主.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 坐标.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 全局变量.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