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
using namespace std;
void main(int argc,char *argv[])
{
for(int i=0;i
{
cout<
}
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开头
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是链接库名。
注:在执行./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