Linux gcc 编译日记

gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器。

在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l[name] 指定库文件名称。指定库文件名称时,需按照指定范式。例如库文件 libabc.a ,  [lib]abc[.a] 中括号部份默认乎略, 此时库文件名称为: abc ,因此在gcc 编译时,通过 -labc 来加载该库.

通常c++ 程序会用到标准库,例如代码中包含 string
#include<string>

using namespace std;

在编译时,会遇到fatal error: string: No such file or directory compilation terminated , 因为代码中使用了标准库代码,编译时,没包含该库。c++标准(静态/动态)库名称是: libstdc++.a  , libstdc++.so , 因此编译时gcc指令附加 -lstdc++

gcc -I/usr/include/openssl/ -Wall testzs.cpp -o testzsexe  -lcrypto -ldl -lstdc++

这条指令包含了3个库 , -o 输出编译结果为:testzsexe , -Wall 表示输出全部编译警告信息, 如果将 -Wall 改为 -Werror , 表示遇到警告信息时,停止编译。 -I 指定库头文件路径。本例中也可不指定 /I指令。因为 /usr/include 是系统默认头文件路径。 在代码中使用 #include<openssl/....h> 即可。

在window 平台代码移值到linux 时,遇到如下异常: fopen_s?was not declared in this scop , 在linux 中没有fopen_s(...)函数, 因此,要么始用linux 平台的fopen 函数,或者重新实现 fopen_s 函数。

时间: 2024-10-28 09:48:55

Linux gcc 编译日记的相关文章

Linux Gcc编译错误(转载)

转自:http://www.linuxidc.com/Linux/2012-01/52153.htm Linux系统下的c编程与Windows有所不同,如果你在用gcc编译代码的时候提示‘for’ loop initial declarations are only allowed in C99 mode,可能就是因为你在loop循环比如for中使用未预先定义的变量,比如: for(int i=0;i<10;i++) { } 这种写法在vc里是没有错的,而子gcc就会提示错误,要求遵守c89标准

Linux GCC编译警告:Clock skew detected. 错误解决办法

今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了make clean后再make,仍然是同样的问题,最后发现这个错误的原因在于系统时间比文件修改时间早,看了下我的系统时间竟然还是2012-01-13,而今天都已经是2012-01-31呢,于是修改时间后重新编译,问题解决. Linux下用date命令可查询和修改系统时间(root权限才可修改) 1 d

linux gcc 编译动态类库(.so)和静态类库(.a)

我的编译环境 ubuntu desktop 16.04 一:测试代码 测试有3个文件:AB.h,AB.c,test.c //AB.h void hello(); //AB.c #include <stdio.h> void hello() { printf("hello from AB.c \n"); } //test.c #include <stdio.h> #include "AB.h" void main(void) { printf(

Linux GCC编译使用动态、静态链接库 (转)

原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件. 动态链接库的好处就是节省内存空间. 1.Linux下创建动态链接库 在使用GCC编译程序时,只需加上-shared选项即可,这样生成的执行程序即为动态链接库. 例如有文件:hello.c x.h main.c [plain] view plaincopy 编译:gcc hello.

linux gcc编译多个文件的方法

假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认输出为a.out. 2. 选项 -o 用法:#gcc test.c -o test 作用:将test.c预处理.汇编.编译并链接形成可执行文件test.-o选项用来指定输出文件的文件名. 3. 选项 -E 用法:#gcc -E test.c -o test.i 作用:将test.c预处理输出test.i文件. 4. 选项 -S

linux gcc编译protocol

p { margin-bottom: 0.25cm; line-height: 120% } a:link { } gcc -c test.pb-c.c//生成test.pb-c.o文件 gcc -c udp_socket_server.c//生成udp_socket_server.o gcc -o test1 udp_socket_server.o test.pb-c.o -lprotobuf-c ./test1 protoc-c --c_out=./ test.proto

Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别

昨天在自己的CentOs7.1上写makefile的时候,发现在一个C程序在编译并链接一个已生成好的lib动态库的时候出错.链接命令大概是这样的: [[email protected] tcpmsg]# gcc -o hello main.c -lmyhello /usr/bin/ld: cannot find -lmyhello collect2: error: ld returned 1 exit status 1 gcc链接动态库时的搜索路径 自以为在当前工程中设置好了环境变量 LD_LI

Linux gcc中的LIBRARY_PATH 和 LD_LIBRARY_PATH

1. GNU 上关于LIBRARY_PATH的说明: LIBRARY_PATH The value of LIBRARY_PATH is a colon-separated list of directories, much like PATH. When configured as a native compiler, GCC tries the directories thus specified when searching for special linker files, if it

linux 下gcc 编译结构体问题

最近在linux 学习c语言的编程,发现好多原来在vs 上的在linux 都编译不过去,今天就遇到了一个问题就是结构体的编译的问题, 结构体大概的定义是 struct Node{ int a; int b; }; 在利用gcc 编译的时候就显示 错误:‘Node’未声明(在此函数内第一次使用), 这就让我感觉很奇怪,原来这都是可以的 后来查了资料改成这个样子就可以了 typedef struct Node{ int a; int b; }Node; 这样就编译成功了.