g++/gcc -o -c -shared等常用指令介绍

gcc的详细操作手册可参考:https://blog.csdn.net/earbao/article/details/53153853

g++的用法与gcc一致

最近在做python的c++扩展模块,用到了gcc编译器,现在来总结下,比如我用了下面指令

g++ -o _myso.so -shared -fpic -I/home/jerry/anaconda3/envs/tf13py36/include/python3.6m  Extest2.cpp 

那么里面的参数都有什么意义呢?

-o:指定生成可执行文件的名称,使用方法g++ -o afile file.cpp file.h..., 如果不使用-o选项,则会生成默认可执行文件a.out

     ps:可执行文件不可与待编译文件或链接文件同名,否则会生成相应可执行文件且覆盖原编译或链接文件.

ps:在liux系统中,动态链接文件称为动态共享对象(DSO,Dynamic shared objects),简称共享对象,一般是以.so为扩展名的文件。在windows系统中,则称为动态链接库(Dynamic linking library),很多以.dll为扩展名。

-shared: 表明产生共享库,

-fPIC:则表明使用地址无关代码。PIC:position independent code.fpic的目的是什么?共享对象可能会被不同的进程加载到不同的位置上,如果共享对象中的指令使用了绝对地址,外部模块地址,那么在共享对象被加载时就必须根据相关模块的加载位置对这个地址做调整,也就是修改这些地址,让它在对应进程中能正确访问。

-I(大写i):编译程序按照-I指定的路径进去搜索头文件

-I/home/include

表示将/home/include目录作为第一个寻找头文件的目录,若找不到需要的头文件,系统会自动到/usr/include找,若还找不到就会到usr/local/include中找

  ps:linux下编译共享库时,必须加上-fPIC参数,否则在链接时会有错误提示(有资料说AMD64的机器才会出现这种错误

 

-c: 只编译、汇编不链接,只生成目标文件(.o)。

$g++ -c main.s -o main.o

    会生成一个main.o的目标文件。 

  ps:我在执行python setup.py build时,在终端发现了下面语句

gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/jerry/anaconda3/include/python3.6m -c Extest2.cpp -o build/temp.linux-x86_64-3.6/Extest2.o

这是不是就意味着只用gcc编译器编译,里面有-c指令, 是不是这就意味着只编译而不链接呢?

-pthread:用于在编译时增加多线程支持,该选项同时对"预处理器“和”链接器“产生作用,这个参数既不影响编译器产生的目标代码的线程安全性,也不影响对提供的支持多线程的函数库libaries的选择。

-Wsign-compare:在有符号数和无符号数进行值比较时,有符号数可能在比较之前被转换为无符号数而导致结果错误,使用该选项会对这样的情况给出警告。

/*  * test_sign_compare.c  */ #include

int main() 
{  
    unsigned int    i = 128;
    signed int      j = -1; 
    if (i < j)               
        {printf("i < j\n"); } 
    else                  
      {printf("i > j\n");}        
    return 0;
 }

gcc -Wsign-compare test_sign_compare.c test_sign_compare.c: In function `main': test_sign_compare.c:10: warning: comparison between signed and unsigned

-DNDEBUG:NDEBUG是一个标准的ANSI宏,表示不进行调试编译。

-g:为了调试用的,加个-g是为了gdb用,不然gdb用不到

-wall:显示警告信息;

-fwrapv:假定有符号运算溢出时回绕

-Wstrict-prototypes:使用了非原型的函数声明时给出警告

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Log data follows: | DEBUG: Executing shell function do_configure | CMake Warning at CMakeLists.txt:7 (message): | Build type not set, falling back to Release mode. | | To specify build type use: | -DCMAKE_BUILD_TYPE=<mode> where <mode> is Debug or Release. | | | -- Building without demo. To enable demo build use: -DWITH_DEMO=True | -- The C compiler identification is GNU 7.3.0 | -- The CXX compiler identification is GNU 7.3.0 | -- Check for working C compiler: /home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/recipe-sysroot-native/usr/bin/aarch64-niic-linux/aarch64-niic-linux-gcc | -- Check for working C compiler: /home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/recipe-sysroot-native/usr/bin/aarch64-niic-linux/aarch64-niic-linux-gcc -- works | -- Detecting C compiler ABI info | -- Detecting C compiler ABI info - done | -- Detecting C compile features | -- Detecting C compile features - done | -- Check for working CXX compiler: /home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/recipe-sysroot-native/usr/bin/aarch64-niic-linux/aarch64-niic-linux-g++ | -- Check for working CXX compiler: /home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/recipe-sysroot-native/usr/bin/aarch64-niic-linux/aarch64-niic-linux-g++ -- works | -- Detecting CXX compiler ABI info | -- Detecting CXX compiler ABI info - done | -- Detecting CXX compile features | -- Detecting CXX compile features - done | -- Found PkgConfig: /home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/recipe-sysroot-native/usr/bin/pkg-config (found version "0.29.2") | -- Checking for module 'uuid' | -- Found uuid, version 2.32.1 | -- Output libraries to /home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/git/runtime/Cpp/dist | CMake Error at runtime/CMakeLists.txt:104 (install): | install TARGETS given no LIBRARY DESTINATION for shared library target | "antlr4_shared". | | | CMake Error at runtime/CMakeLists.txt:107 (install): | install TARGETS given no ARCHIVE DESTINATION for static library target | "antlr4_static". | | | -- Configuring incomplete, errors occurred! | See also "/home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/build/CMakeFiles/CMakeOutput.log".这是报错的log,如何解决这个问题
最新发布
07-11
根据提供的日志,可以看出在CMake配置过程中出现了两个错误。错误信息分别是: 1. CMake Error at runtime/CMakeLists.txt:104 (install): install TARGETS given no LIBRARY DESTINATION for shared library target "antlr4_shared". 2. CMake Error at runtime/CMakeLists.txt:107 (install): install TARGETS given no ARCHIVE DESTINATION for static library target "antlr4_static". 这些错误表明在配置期间,对于共享库目标 "antlr4_shared" 没有给出 LIBRARY DESTINATION,对于静态库目标 "antlr4_static" 没有给出 ARCHIVE DESTINATION。 要解决这个问题,你可以尝试以下方法: 1. 检查CMakeLists.txt文件:打开 "/home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/git/runtime/CMakeLists.txt" 文件,并查找与 "antlr4_shared" 和 "antlr4_static" 相关的安装指令。 2. 添加正确的目标安装路径:在对应的安装指令中,确保给出了正确的目标安装路径。例如,对于共享库目标 "antlr4_shared",应该设置 LIBRARY DESTINATION,而对于静态库目标 "antlr4_static",应该设置 ARCHIVE DESTINATION。 3. 重新运行CMake配置:保存文件,并重新运行CMake配置命令以重新生成项目。可以尝试使用以下命令:`cmake /path/to/source`。 4. 编译和安装:如果配置成功,继续进行编译和安装。使用 `make` 命令编译项目,并使用 `make install` 命令安装项目。 如果问题仍然存在,可能需要进一步检查CMakeLists.txt文件中的其他配置,以及确保所有依赖项都正确安装。在解决问题时,可以查看 "/home/wu/test_D9/D9_PTG1.5/build-d9/tmp/work/aarch64-niic-linux/antlr4/4.7.2-r0/build/CMakeFiles/CMakeOutput.log" 文件,以获取更多有关配置错误的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值