编译包含 CPLEX 工具的项目时出错
Error while compiling a project which includes CPLEX tool
我正在从事必须在某些时候包含 CPLEX 工具的项目。 更详细地说,我实现了以下类 (即相应的文件):随机.cpp、实例.cpp、计时器.cpp。解决方案.cpp包含在还必须包含 cplex 库的Hybrid_ea.cpp中。
最后,通过运行 Algorithm.cpp(此处定义的 main() 函数)来执行项目。
我想在Linux平台上运行该项目,创建如下所示的Makefile:
TARGET = Algorithm
CXXFLAGS = -ansi -O3
GENOBJS = Random.o
#CPLOBJS = Timer.o Random.o Instance.o Hybrid_ea.o
GREOBJS = Timer.o Random.o Instance.o Solution.o Hybrid_ea.o
SYSTEM = x86-64_linux
LIBFORMAT = static_pic
CPLEXDIR = /home/root/Desktop/projects/software/cplex-12.5/cplex
CONCERTDIR = /home/root/Desktop/projects/software/cplex-12.5/concert
CCC = g++
CCOPT = -m64 -O -fPIC -fexceptions -DNDEBUG -DIL_STD -std=c++11 -fpermissive -w
CPLEXBINDIR = $(CPLEXDIR)/bin/$(BINDIST)
CPLEXLIBDIR = $(CPLEXDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
CONCERTLIBDIR = $(CONCERTDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
CCLNFLAGS = -L$(CPLEXLIBDIR) -lilocplex -lcplex -L$(CONCERTLIBDIR) -lconcert -lm -pthread
CLNFLAGS = -L$(CPLEXLIBDIR) -lcplex -lm -pthread
CONCERTINCDIR = $(CONCERTDIR)/include
CPLEXINCDIR = $(CPLEXDIR)/include
CCFLAGS = $(CCOPT) -I$(CPLEXINCDIR) -I$(CONCERTINCDIR)
all: ${TARGET}
Algorithm: Algorithm.o $(GREOBJS)
$(CCC) $(CCFLAGS) Algorithm.o $(GREOBJS) -o Algorithm $(CCLNFLAGS)
Algorithm.o: Algorithm.cpp
$(CCC) -c $(CCFLAGS) Algorithm.cpp -o Algorithm.o
clean:
@rm -f *~ *.o ${TARGET} core
链接过程有些错误。我检查了一下,我的 CPLEX 版本是正确的,因为其他版本可以执行更简单的项目;
尝试编译项目时给出的完整输出:
g++ -c -m64 -O -fPIC -fexceptions -DNDEBUG -DIL_STD -std=c++11 -fpermissive -w -I/home/root/Desktop/projects/LCAPS_software/cplex-12.5/cplex/include -I/home/root/Desktop/projects/LCAPS_software/cplex-12.5/concert/include Algorithm.cpp -o Algorithm.o
g++ -ansi -O3 -c -o Timer.o Timer.cc
g++ -ansi -O3 -c -o Random.o Random.cc
g++ -ansi -O3 -c -o Instance.o Instance.cpp
g++ -ansi -O3 -c -o Solution.o Solution.cpp
g++ -ansi -O3 -c -o hybrid_ea.o hybrid_ea.cpp
In file included from hybrid_ea.cpp:22:0:
hybrid_ea.h:39:10: fatal error: ilcplex/ilocplex.h: No such file or directory
#include <ilcplex/ilocplex.h>
^~~~~~~~~~~~~~~~~~~~
compilation terminated.
<builtin>: recipe for target 'hybrid_ea.o' failed
make: *** [hybrid_ea.o] Error 1
任何帮助将不胜感激。
仅使用用于查找 CPLEX 包含文件的适当选项编译文件Algorithm.cpp
:
-I/home/root/Desktop/projects/LCAPS_software/cplex-12.5/cplex/include
-I/home/root/Desktop/projects/LCAPS_software/cplex-12.5/concert/include
由于hybrid_ea.h
还尝试包含一些 CPLEX 头文件,因此hybrid_ea.cpp
的编译也应具有上述选项。
如果您在问题中发布的 makefile 是完整的,那么我怀疑问题如下:您没有定义特定的命令来编译任何.cc
或.cpp
文件,除了Algorithm.cpp
. 因此,所有其他文件都使用默认命令g++ -ansi -O3 -c -o [file].o [file].cpp
进行编译。 而且,此默认命令没有用于 CPLEX 库位置的包含指令。
如 ftp://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html 中所述,这些文件是使用 make 的隐式规则编译的。 C++文件的隐式规则是使用$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)
。 请注意此规则如何使用CPPFLAGS
和CXXFLAGS
而不是您在生成文件末尾定义的变量CCFLAGS
来包含正确的包含指令。
因此,将生成文件的末尾更改为以下内容应该有效:
CPPFLAGS = $(CCOPT) -I$(CPLEXINCDIR) -I$(CONCERTINCDIR)
all: ${TARGET}
Algorithm: Algorithm.o $(GREOBJS)
$(CCC) $(CCFLAGS) Algorithm.o $(GREOBJS) -o Algorithm $(CCLNFLAGS)
clean:
@rm -f *~ *.o ${TARGET} core
定义变量CPPFLAGS
后,它将自动用于编译项目中的任何.cpp
文件。
- 当我尝试通过 mingw 使用 CMake 和 SFML 库编译项目时出错
- 如何使用我构建的库,而不会从源代码出错,但不为我自己的项目编译?
- Flex/Bison:构建示例项目以生成 CPP 时出错
- 将项目导入 Android Studio 后出错
- 将 Dr. Memory 与 Visual Studio 项目配合使用时出错:缺少应用程序所需的库
- 使用 C++Builder 项目读取字符串中的文件时出错
- 在 Visual Studio 2015 中生成 vsal 项目时出错
- 创建新的 Visual Studio c++ 项目时出错
- 编译包含 CPLEX 工具的项目时出错
- CMake 和/或在为项目添加提升时出错
- 链接 gtest 项目时出错
- iOS:在真实设备上运行项目时出错
- 在qmake项目中编译sqlite时出错
- LNK1104将Boost库添加到Qt项目时出错
- 仅在从命令行构建Qt项目时出错
- 运行调试库项目时发布库出错
- Qt项目qmake在构建上出错
- 将VC++项目从VS2010升级到VS2012时出错
- C++/构建项目出错
- Visual Studio 2015编译c++向导项目出错