Linux命令

pwd      查看当前路径
rm 文件名     删除文件
rm -rf 文件夹  删除文件夹

touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
ls -l    查看文件的详细信息,如大小等

gcc/g++

g++ main.cpp -o main
预编译,编译,汇编,链接生成执行文件main
g++ -c main.cpp
先编译不链接,生成文件main.o(编译的是单个文件,不管链接的库路径,当项目文件很多时很有用,提高效率不用每个都编译)。

g++ main.o -o main      链接,找唯一的main()函数,最终生成执行文件main
g++ -E main.cpp  预编译

g++ -E main.cpp>main.e
将预编译输出到main.e,便于查看。预编译将所有头文件、用宏替换拼到一个文件中,因为编译的时候只编译这一个文件
g++ -S main.cpp  只编译不汇编(生成文件main.s汇编码)
g++ -g main.cpp -o main_d  
有调试信息的可执行文件相当于win的Debug版本

写程序:

int main(int argc, char *argv[])

argc 是 argument count的缩写,表示传入main函数的参数个数;
argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个;
例如:

#include <iostream>
using namespace std;
void main(int argc,char *argv[])
{
    for(int i=0;i<argc;i++)
    {
        cout<<"argument["<<i<<"] is: "<<argv[i]<<endl;
    }
    system("pause");
}

argv是指向指针的指针,main函数的第二个参数“char *argv[]“也可以替换为 “char **argv“,两者是等价的。

多文件编译
预编译的时候需要指定头文件的路径:

g++  main.c  ../Person/Person.cpp  -o  main  -I../Person 

预编译过程需要头文件路径 , -I../Person指的是头文件所在的路径;
编译或链接过程(我不确定到底是哪个好衰)需要函数的定义,../Person/Person.cpp是头文件中的成员函数的实现

:再多的文件也把文件是拼过来;也可以先生成.o文件在来链接。
动态链接库
1、生成名为Person的动态链接库文件libPerson.so

 g++ Person.cpp -fpic -shared  -o libPerson.so    命名必须以lib开头

Linux命令
2、使用动态链接库文件

g++ Person.cpp -o main -I../Person    能找到头文件 

g++ main.cpp -o main -I../Person -L../Person -lPerson   
能找到头文件和动态链接库文件

-I../Person是头文件路径;-L../Person是指定libPerson.so路径(如果不指定默认去系统环境变量的lib库找);-lPerson是链接库名。
Linux命令
:在执行./main时,报错:
解决:方法1把动态链接库文件拷贝到系统的path路径里;
方法2如图,使用执行脚本的方式
执行脚本写 :

export LD_LIBRARY_PATH=../Person

最后,执行 ./main
也可以用ldd main 查看程序的链接情况。
补充:在使用opencv的时候出现了错误:

main.cpp:(.text+0x53):对‘cv::imread(cv::String const&, int)’未定义的引用

解决:这是链接器的错误。使用 pkg-config 的 –cflags 参数可以给出在编译时所需要的选项,而 –libs 参数可以给出连接时的选项

qiaoyunhao@ThinkPad:~/MyStudy/c_project/test$ g++ main.cpp `pkg-config --cflags --libs opencv` -o main

问题解决!
pkg详解参考:
https://blog.csdn.net/a1059682127/article/details/80554729
https://blog.csdn.net/weicao1990/article/details/51933918
makefiles的书写参考其它https://www.cnblogs.com/Bw98blogs/p/7297007.html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/182572.html

(0)
上一篇 2021年11月1日
下一篇 2021年11月1日

相关推荐

发表回复

登录后才能评论