有了C++源代码,如何编译?

fly199157 2017-05-22 08:45:25
楼主纯粹小白一个,离开了IDE就什么都不会了。(额,就算有IDE会的也很有限,尴尬脸...)。想用一个开源的数学库(PaStix,官网:http://pastix.gforge.inria.fr/files/README-txt.html),但是我不会编译源代码。我想用QT编译成静态库,怎么做?
里面提供了编译步骤:
Building library

To build PaStiX library:
1. copy one config file from src/config/ to config.in,
2. edit this file to set your options,
3. run
make


Check that your installation is working
1. run
 make examples
. /example/bin/simple -lap 100


After that, PaStiX can be used by
1. including :
install/bin/pastix-conf --incs

2. linking with :
 install/bin/pastix-conf --libs

or
install/bin/pastix-conf --libs_murge


Over

如果Qt不能达到预期,用msys行么,对了msys是什么东东?。。。。。也不会,怎么用?
...全文
1108 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
ep_mashiro 2019-10-29
  • 打赏
  • 举报
回复
引用 9 楼 fly199157 的回复:
其实我最想知道的是如何在Eigen库中调用其他的模块 1、首先需要下载其他模块的文件,比如PaSTix模块(已完成)。 2、编译模块,及其依赖项(怎么做) PasSTiX 官网给出了编译流程,但是我不会。。。。。流程如1L所示。 3、Eigen库链接到PasTix库。(Eigen库提供了调用其他库的接口) EIgen链接到其他模块接口的方法: In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies. The dependencies depend on how PaSTiX has been compiled. For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task. 我确实找到了FindPaSTiX.cmake文件,但是整个的流程始终不清楚。 最后解释一下为什么通过Eigen来调用PasTix,因为我的数据结构是基于Eigen设计的,Eigen自带的LU分解器效率太低,PaSTiX的分解器效率高很多。通过Eigen调用PaSTiX接口可以不改变数据结构。 所以,各位大大,求帮助啊。先谢过了。
你好,请问下你解决了这个问题了吗?
fly199157 2017-05-26
  • 打赏
  • 举报
回复
引用 17 楼 ipqtjmqj 的回复:
[quote=引用 16 楼 fly199157 的回复:] [quote=引用 14 楼 ipqtjmqj 的回复:] [quote=引用 13 楼 fly199157 的回复:] 编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?)
对,#表示注释 应该是给某个Makefile用的[/quote] 我还有个疑问,如果我电脑安装了GCC和cmake-gui,是不是直接就可以在cmake-gui中直接就编译完成了,不用专门再调出GCC来编译一次了[/quote] 肯定需要调gcc,只不过可能cmake-gui自动调了gcc,造成直接就编译的假象。[/quote] 确实是这样的,在cmake-gui里面直接设置调用。 说个题外话,为什么国外的代码都是这么编译处理呢。国内,不知道其他学校,说说我自己的学校(我不是计算机专业),还可以的那种,上C语言课程就不怎么讲编译原理,弄的好难接轨。。。。。
ipqtjmqj 2017-05-26
  • 打赏
  • 举报
回复
引用 19 楼 fly199157 的回复:
[quote=引用 17 楼 ipqtjmqj 的回复:] [quote=引用 16 楼 fly199157 的回复:] [quote=引用 14 楼 ipqtjmqj 的回复:] [quote=引用 13 楼 fly199157 的回复:] 编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?)
对,#表示注释 应该是给某个Makefile用的[/quote] 我还有个疑问,如果我电脑安装了GCC和cmake-gui,是不是直接就可以在cmake-gui中直接就编译完成了,不用专门再调出GCC来编译一次了[/quote] 肯定需要调gcc,只不过可能cmake-gui自动调了gcc,造成直接就编译的假象。[/quote] 确实是这样的,在cmake-gui里面直接设置调用。 说个题外话,为什么国外的代码都是这么编译处理呢。国内,不知道其他学校,说说我自己的学校(我不是计算机专业),还可以的那种,上C语言课程就不怎么讲编译原理,弄的好难接轨。。。。。[/quote] 这样编译是为了跨操作系统。编译原理讲的是编译的原理,并不是编译器的使用,也没讲Makefile,CMake的使用。使用工具比工具的原理简单,所以学校没教,而且学了编译原理也用不着,除非你想自己设计一种语言。
ipqtjmqj 2017-05-25
  • 打赏
  • 举报
回复
引用 13 楼 fly199157 的回复:
编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?)
对,#表示注释 应该是给某个Makefile用的
guzi19801130 2017-05-25
  • 打赏
  • 举报
回复
不是很懂 顶一下
ipqtjmqj 2017-05-25
  • 打赏
  • 举报
回复
引用 16 楼 fly199157 的回复:
[quote=引用 14 楼 ipqtjmqj 的回复:] [quote=引用 13 楼 fly199157 的回复:] 编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?)
对,#表示注释 应该是给某个Makefile用的[/quote] 我还有个疑问,如果我电脑安装了GCC和cmake-gui,是不是直接就可以在cmake-gui中直接就编译完成了,不用专门再调出GCC来编译一次了[/quote] 肯定需要调gcc,只不过可能cmake-gui自动调了gcc,造成直接就编译的假象。
fly199157 2017-05-25
  • 打赏
  • 举报
回复
引用 11 楼 ipqtjmqj 的回复:
我来讲讲编译的历史吧: 第一阶段:直接编译:编译器+源文件 就是简单的翻译一下 第二阶段:编译链接: 2.1.编译器+源文件+头文件+库文件+链接器 一些常用的函数预编译成库文件,函数的声明则放到头文件,源文件编译后再与库文件链接 库分静态与动态。动态库在程序运行时加载。 2.2.编译器+源文件+头文件+库文件+链接器+环境变量 常用的头文件与库文件每次都要指定其路径太麻烦,于是保存到环境变量中 第三阶段:自动化脚本及IDE: 3.1.编译器+源文件+头文件+库文件+链接器+环境变量+shell脚本 源文件多了后每次都要敲好几句命令,于是把这些命令保存起来 3.2.编译器+源文件+头文件+库文件+链接器+环境变量+(Makefile脚本 或 工程文件) shell脚本不够智能,没修改过到也会重新编译,于是发明了Makefile脚本,未修改的不会编译(虽然shell脚本也能通过读取时间判断,但比较麻烦) 图形化界面的集成开发环境(IDE)的工程文件其角色相当于Makefile. 3.3.编译器+源文件+头文件+库文件+链接器+环境变量+(跨平台脚本 或 跨平台开发环境) 比如CMake,配置文件为CMakeList.txt根据配置会生成适用于不同平台的Makefile或工程文件。 所以,要编译,首先把工具下载好,编译时或链接时或执行脚本时缺少什么会报错,少什么就装什么
编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?) HOSTARCH = i686_pc_windows VERSIONBIT = _32bit EXEEXT = OBJEXT = .o LIBEXT = .a CCPROG = gcc -Wall CFPROG = gfortran CF90PROG = gfortran -ffree-form CXXPROG = g++ MCFPROG = mpif90 CF90CCPOPT = -ffree-form -x f95-cpp-input # Compilation options for optimization (make expor) CCFOPT = -O3 # Compilation options for debug (make | make debug) CCFDEB = -g3 CXXOPT = -O3 NVCCOPT = -O3 LKFOPT = MKPROG = make MPCCPROG = mpicc -Wall MPCXXPROG = mpic++ -Wall CPP = cpp ARFLAGS = ruv ARPROG = ar EXTRALIB = -lgfortran -lm #-lrt CTAGSPROG = ctags VERSIONMPI = _mpi VERSIONSMP = _smp VERSIONSCH = _static VERSIONINT = _int VERSIONPRC = _simple VERSIONFLT = _real VERSIONORD = _scotch ################################################################### # SETTING INSTALL DIRECTORIES # ################################################################### # ROOT = /path/to/install/directory # INCLUDEDIR = ${ROOT}/include # LIBDIR = ${ROOT}/lib # BINDIR = ${ROOT}/bin # PYTHON_PREFIX = ${ROOT} ################################################################### # SHARED LIBRARY GENERATION # ################################################################### SHARED=1 SOEXT=.dll SHARED_FLAGS = -shared -Wl,--out-implib,__SO_NAME__.a ################################################################### # INTEGER TYPE # ################################################################### # Uncomment the following lines for integer type support (Only 1) #VERSIONINT = _long #CCTYPES = -DFORCE_LONG -DLONG #--------------------------- #VERSIONINT = _int32 #CCTYPES = -DINTSIZE32 #--------------------------- #VERSIONINT = _int64 #CCTYPES = -DINTSSIZE64 ################################################################### # FLOAT TYPE # ################################################################### CCTYPESFLT = # Uncomment the following lines for double precision support VERSIONPRC = _double CCTYPESFLT := $(CCTYPESFLT) -DPREC_DOUBLE # Uncomment the following lines for float=complex support #VERSIONFLT = _complex #CCTYPESFLT := $(CCTYPESFLT) -DTYPE_COMPLEX ################################################################### # MPI/THREADS # ################################################################### # ---- Thread Posix ------ PTHREAD_HOME?=$(HOME)/pthreads/Pre-built.2 CCTYPES := $(CCTYPES) -I$(PTHREAD_HOME)/include EXTRALIB := $(EXTRALIB) -L$(PTHREAD_HOME)/lib/x86 -lpthreadGC2 # Uncomment the following lines for sequential (NOMPI) version #VERSIONMPI = _nompi CCTYPES := $(CCTYPES) -DFORCE_NOMPI MPCCPROG = $(CCPROG) MCFPROG = $(CFPROG) MPCXXPROG = $(CXXPROG) # Uncomment the following lines for non-threaded (NOSMP) version #VERSIONSMP = _nosmp #CCTYPES := $(CCTYPES) -DFORCE_NOSMP # Uncomment the following line to enable a progression thread, # then use IPARM_THREAD_COMM_MODE #CCPASTIX := $(CCPASTIX) -DPASTIX_THREAD_COMM # Uncomment the following line if your MPI doesn't support MPI_THREAD_MULTIPLE level, # then use IPARM_THREAD_COMM_MODE #CCPASTIX := $(CCPASTIX) -DPASTIX_FUNNELED # Uncomment the following line if your MPI doesn't support MPI_Datatype correctly #CCPASTIX := $(CCPASTIX) -DNO_MPI_TYPE # Uncomment the following line if you want to use semaphore barrier # instead of MPI barrier (with IPARM_AUTOSPLIT_COMM) #CCPASTIX := $(CCPASTIX) -DWITH_SEM_BARRIER # Uncomment the following lines to enable StarPU. #CCPASTIX := $(CCPASTIX) `pkg-config libstarpu --cflags` -DWITH_STARPU #EXTRALIB := $(EXTRALIB) `pkg-config libstarpu --libs` # Uncomment the correct 2 lines #CCPASTIX := $(CCPASTIX) -DCUDA_SM_VERSION=11 #NVCCOPT := $(NVCCOPT) -maxrregcount 32 -arch sm_11 #CCPASTIX := $(CCPASTIX) -DCUDA_SM_VERSION=13 #NVCCOPT := $(NVCCOPT) -maxrregcount 32 -arch sm_13 CCPASTIX := $(CCPASTIX) -DCUDA_SM_VERSION=20 NVCCOPT := $(NVCCOPT) -arch sm_20 # Uncomment the following line to enable StarPU profiling # ( IPARM_VERBOSE > API_VERBOSE_NO ). #CCPASTIX := $(CCPASTIX) -DSTARPU_PROFILING # Uncomment the following line to enable CUDA (StarPU) #CCPASTIX := $(CCPASTIX) -DWITH_CUDA ################################################################### # Options # ################################################################### # Windows uses rand() not random() CCTYPES := $(CCTYPES) -DCOMMON_RANDOM_RAND # Show memory usage statistics #CCPASTIX := $(CCPASTIX) -DMEMORY_USAGE # Show memory usage statistics in solver #CCPASTIX := $(CCPASTIX) -DSTATS_SOPALIN # Uncomment following line for dynamic thread scheduling support #CCPASTIX := $(CCPASTIX) -DPASTIX_DYNSCHED # Uncomment the following lines for Out-of-core #CCPASTIX := $(CCPASTIX) -DOOC -DOOC_NOCOEFINIT -DOOC_DETECT_DEADLOCKS
fly199157 2017-05-25
  • 打赏
  • 举报
回复
引用 14 楼 ipqtjmqj 的回复:
[quote=引用 13 楼 fly199157 的回复:] 编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?)
对,#表示注释 应该是给某个Makefile用的[/quote] 我还有个疑问,如果我电脑安装了GCC和cmake-gui,是不是直接就可以在cmake-gui中直接就编译完成了,不用专门再调出GCC来编译一次了
fly199157 2017-05-25
  • 打赏
  • 举报
回复
引用 14 楼 ipqtjmqj 的回复:
[quote=引用 13 楼 fly199157 的回复:] 编译说明里面有个config.in文件,打开后部分代码如下:(问题:这是给那个软件用的?#表示被注释了,是吗?)
对,#表示注释 应该是给某个Makefile用的[/quote] 在config.in文件里面可以根据自己的要求进行定制,比如编译后生成的lib文件和include文件存放的位置,然后用cmake-gui加载config.in文件生成Makefile,最后用GCC加载Makefile就可以进行编译了, 编译后想要得文件就去自己设置的文件夹里面去查找,对吧?
ipqtjmqj 2017-05-24
  • 打赏
  • 举报
回复
我来讲讲编译的历史吧: 第一阶段:直接编译:编译器+源文件 就是简单的翻译一下 第二阶段:编译链接: 2.1.编译器+源文件+头文件+库文件+链接器 一些常用的函数预编译成库文件,函数的声明则放到头文件,源文件编译后再与库文件链接 库分静态与动态。动态库在程序运行时加载。 2.2.编译器+源文件+头文件+库文件+链接器+环境变量 常用的头文件与库文件每次都要指定其路径太麻烦,于是保存到环境变量中 第三阶段:自动化脚本及IDE: 3.1.编译器+源文件+头文件+库文件+链接器+环境变量+shell脚本 源文件多了后每次都要敲好几句命令,于是把这些命令保存起来 3.2.编译器+源文件+头文件+库文件+链接器+环境变量+(Makefile脚本 或 工程文件) shell脚本不够智能,没修改过到也会重新编译,于是发明了Makefile脚本,未修改的不会编译(虽然shell脚本也能通过读取时间判断,但比较麻烦) 图形化界面的集成开发环境(IDE)的工程文件其角色相当于Makefile. 3.3.编译器+源文件+头文件+库文件+链接器+环境变量+(跨平台脚本 或 跨平台开发环境) 比如CMake,配置文件为CMakeList.txt根据配置会生成适用于不同平台的Makefile或工程文件。 所以,要编译,首先把工具下载好,编译时或链接时或执行脚本时缺少什么会报错,少什么就装什么
fly199157 2017-05-24
  • 打赏
  • 举报
回复
引用 9 楼 fly199157 的回复:
其实我最想知道的是如何在Eigen库中调用其他的模块 1、首先需要下载其他模块的文件,比如PaSTix模块(已完成)。 2、编译模块,及其依赖项(怎么做) PasSTiX 官网给出了编译流程,但是我不会。。。。。流程如1L所示。 3、Eigen库链接到PasTix库。(Eigen库提供了调用其他库的接口) EIgen链接到其他模块接口的方法: In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies. The dependencies depend on how PaSTiX has been compiled. For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task. 我确实找到了FindPaSTiX.cmake文件,但是整个的流程始终不清楚。 最后解释一下为什么通过Eigen来调用PasTix,因为我的数据结构是基于Eigen设计的,Eigen自带的LU分解器效率太低,PaSTiX的分解器效率高很多。通过Eigen调用PaSTiX接口可以不改变数据结构。 所以,各位大大,求帮助啊。先谢过了。
求帮助啊啊啊
fly199157 2017-05-24
  • 打赏
  • 举报
回复
引用 11 楼 ipqtjmqj 的回复:
我来讲讲编译的历史吧: 第一阶段:直接编译:编译器+源文件 就是简单的翻译一下 第二阶段:编译链接: 2.1.编译器+源文件+头文件+库文件+链接器 一些常用的函数预编译成库文件,函数的声明则放到头文件,源文件编译后再与库文件链接 库分静态与动态。动态库在程序运行时加载。 2.2.编译器+源文件+头文件+库文件+链接器+环境变量 常用的头文件与库文件每次都要指定其路径太麻烦,于是保存到环境变量中 第三阶段:自动化脚本及IDE: 3.1.编译器+源文件+头文件+库文件+链接器+环境变量+shell脚本 源文件多了后每次都要敲好几句命令,于是把这些命令保存起来 3.2.编译器+源文件+头文件+库文件+链接器+环境变量+(Makefile脚本 或 工程文件) shell脚本不够智能,没修改过到也会重新编译,于是发明了Makefile脚本,未修改的不会编译(虽然shell脚本也能通过读取时间判断,但比较麻烦) 图形化界面的集成开发环境(IDE)的工程文件其角色相当于Makefile. 3.3.编译器+源文件+头文件+库文件+链接器+环境变量+(跨平台脚本 或 跨平台开发环境) 比如CMake,配置文件为CMakeList.txt根据配置会生成适用于不同平台的Makefile或工程文件。 所以,要编译,首先把工具下载好,编译时或链接时或执行脚本时缺少什么会报错,少什么就装什么
那我现在是不是应该下载cmake或者GCC(msys?),然后通过命令行进行编译?我先研究编译吧,真的一点都不懂这些东西,非常感谢你。研究完编译后,我在研究如何从Eigen库中进行调用,我说的不是代码而是让Eigen库可以识别我编译出了这些东西,然后加载进去。
fly199157 2017-05-23
  • 打赏
  • 举报
回复
引用 5 楼 ipqtjmqj 的回复:
不是有编译好的dll下载?https://gforge.inria.fr/frs/?group_id=186
额,我并不是直接用这个库,调用这个库的接口需要编译它。然后你用了这个库没有,可以并行LU分解吗?
ipqtjmqj 2017-05-23
  • 打赏
  • 举报
回复
不是有编译好的dll下载?https://gforge.inria.fr/frs/?group_id=186
fly199157 2017-05-23
  • 打赏
  • 举报
回复
引用 2 楼 kaijkl 的回复:
可以在linux下用gcc来编译
windows下用MinGW+msys行不行?或者CMake GUI之类的。对了,这些都是编译器对吧。然后命令是怎么回事,怎么用啊?哪里有图文教程之类的,真的很想学啊,但是无知道从哪里开始。
fly199157 2017-05-23
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。
关键是关键字是那些都不知道,一头雾水
cain-won 2017-05-23
  • 打赏
  • 举报
回复
可以在linux下用gcc来编译
赵4老师 2017-05-23
  • 打赏
  • 举报
回复
百度搜相关关键字。
fly199157 2017-05-23
  • 打赏
  • 举报
回复
其实我最想知道的是如何在Eigen库中调用其他的模块 1、首先需要下载其他模块的文件,比如PaSTix模块(已完成)。 2、编译模块,及其依赖项(怎么做) PasSTiX 官网给出了编译流程,但是我不会。。。。。流程如1L所示。 3、Eigen库链接到PasTix库。(Eigen库提供了调用其他库的接口) EIgen链接到其他模块接口的方法: In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies. The dependencies depend on how PaSTiX has been compiled. For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task. 我确实找到了FindPaSTiX.cmake文件,但是整个的流程始终不清楚。 最后解释一下为什么通过Eigen来调用PasTix,因为我的数据结构是基于Eigen设计的,Eigen自带的LU分解器效率太低,PaSTiX的分解器效率高很多。通过Eigen调用PaSTiX接口可以不改变数据结构。 所以,各位大大,求帮助啊。先谢过了。
fly199157 2017-05-23
  • 打赏
  • 举报
回复
引用 7 楼 ipqtjmqj 的回复:
[quote=引用 6 楼 fly199157 的回复:] [quote=引用 5 楼 ipqtjmqj 的回复:] 不是有编译好的dll下载?https://gforge.inria.fr/frs/?group_id=186
额,我并不是直接用这个库,调用这个库的接口需要编译它。然后你用了这个库没有,可以并行LU分解吗?[/quote] 我没用过。用dll难道不能调用这个库的接口?[/quote] 我也不太确定能不能,完全是懵的。我用的Eigen库,Eigen自带的LU分解器效率太低,但是Eigen提供了调用第三方模块的接口。EIgen链接到其他模块接口的方法: In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies. The dependencies depend on how PaSTiX has been compiled. For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task. 我确实找到了FindPaSTiX.cmake文件,但是整个的流程始终不清楚。 作为一个小白,难受。。。。
加载更多回复(1)

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧