linux - 使用命令行编译 C++ 代码

标签 linux g++

我正在使用下面的命令编译我的 C++ 代码,它使用的是 OpenCV 库,我的命令就像

    opencv main.cpp -o binary_name

其中 opencv 是像

这样的别名命令
alias opencv="g++ `pkg-config --cflags opencv`  `pkg-config --libs opencv`"

但是如果我忘记了“-o binary_name”,命令会删除我的源文件。为什么会这样……?

我应该对上面的别名命令做什么样的修改来编译我的源文件

   opencv main.cpp binary_name  

提前致谢......

最佳答案

gcc 的参数顺序很重要,源文件或目标文件应该在库之前给出,并且库应该在较低级别的库之前用较高级别的库调用他们正在使用。

所以你应该编译

    g++ -Wall -g $(pkg-config --cflags opencv) main.cpp \
              $(pkg-config --libs opencv) -o binaryprog

但您确实应该使用 Makefile,或者至少有一个 shellscript。

不要忘记 -Wall 选项来获取所有警告。改进您的代码,直到编译器不发出警告为止。使用 -g 选项获取调试信息,以便能够使用 gdb ./binaryprog 调试您的程序。

一旦您的程序被调试,将-g替换为-O3(或者可能替换为-O2 -g)以请求GCC优化生成的代码。

关于linux - 使用命令行编译 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13227126/

相关文章:

regex - 递归地用当前ip替换IP

linux - 进程间通信 (IPC) 的正确实现

C++ 模板化友元类

c++ - 让 mingw-get 正确安装 - mingw/msys 路径缺失以及更多!

c++ - 在 g++ 中,何时会在模板实例化失败的错误消息中收到 <error-type>?

c++ - 链接器输入文件未使用,因为链接未完成

java - 这两个命令行执行.jar的区别?

linux - 如何知道哪个 ttyS* 文件链接到哪个串行端口?

linux - .htaccess 文件破坏了我的 WP 网站

c++ - 使编译器假设所有情况都在没有默认情况下的开关中处理