我这里使用了第一个,要严格对齐下面的Type,不然会出错。
-I(大写的i)是头文件的路径
-L是动态链接库的地址
-l(小写的L)是动态链接库的名字
g++ -I /opt/intel/mkl/include/ -L /opt/intel/mkl/lib/intel64 -l mkl_rt test_tanh.cpp
上述是编译时候需要的静态库,动态库以及一些头文件路径。
运行时需要export library这些链接库。
export LD_LIBRARY_PATH=/opt/intel/compilers_and_libraries/linux/lib/intel64:/opt/intel/mkl/lib/intel64_lin:/opt/intel/lib/intel64_lin:/opt/intel/oneapi/dnnl/latest/cpu_iomp/lib:/opt/intel/compilers_and_libraries_2019.3.199/linux/compiler/lib/intel64_lin:$LD_LIBRARY_PATH
—————————————————————————————————————————————
c++编译分为四部分
1.预处理
宏的替换,还有注释的消除,还有找到相关的库文件,将#include文件的全部内容插入。若用<>括起文件则在系统的INCLUDE目录中寻找文件,若用" "括起文件则在当前目录中寻找文件。
g++ -E xxx.cpp > xxx.i
2.生成汇编语言
这时候生成.s文件,内部全是汇编语言。
g++ -S xxx.cpp
3.汇编过程生成机器码(后缀为.o)
g++ -c xxx.cpp
4.连接目标代码,生成可执行程序
g++ xxx.o ./a.out