linux C 编译时手动链接遇到的问题(未解决)
写多线程的时候,编译的时候遇到了问题,开始的时候是这样的:
编译器不认识pthread_create和pthread_join这两个函数。
搜了一下原因是没有链接相应的库,下面是我看到一个博友写的:
程序库的链接
试着编译下面这个程序
/* temp.c */
#include
int main(int argc,char **argv)
{
double value;
printf("Value:%f\n",value);
}
这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误.
/tmp/cc33Kydu.o: In function `main':
/tmp/cc33Kydu.o(.text+0xe): undefined reference to `log'
collect2: ld returned 1 exit status
出现这个错误是因为编译器找不到log的具体实现.虽然我们包括了正确的头文件,但是我们在编译的时候还是要连接确定的库.在Linux下,为了使用数学函数,我们必须和数学库连接,为此我们要加入 -lm 选项. gcc -o temp temp.c -lm这样才能够正确的编译.也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了. 有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的 -L选项指定路径.比如说我们有一个库在 /home/hoyt/mylib下,这样我们编译的时候还要加上 -L/home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径.
但是我还是不明白 -L 和 -l 的区别(大小写有什么不同?),偶尔也会看到有 -I(大写的i),不知道作用是什么。
转载于:https://www.cnblogs.com/Stomach-ache/p/3703160.html
linux C 编译时手动链接遇到的问题(未解决)相关推荐
- lat_mem_rd 内存延迟测试工具原理,lmbench编译时llseek链接不到问题解决
命令介绍: 说明页: LAT_MEM_RD(8) manual page lat_mem_rd是lmbench中的一个工具,它的主要作用是测试内存访问的延迟. 源码地址: https://github ...
- Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换
Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换 一.各操作系统下文件换行符 二.TortoiseGit下载Github代码关闭文件换行符 三.示例说明 1.开启换行符自动 ...
- Linux kernel编译时编译选项多选一如何固化在config文件
每次在进行裁剪的Linux kernel编译时,都会碰到有提示,让你在某些编译选项多选一,如: Initialize kernel stack variables at function entry ...
- linux内核编译时bad register name `%dil'错误
在ubuntu 10.04下编译2.6.23内核时,出现了如下错误: boot.h112行如下: gcc嵌入汇编限定符的意义: r表示可以选任何寄存器,结果在编译时选了dil寄存器,这个好像是x86_ ...
- c语言编译说文件不存在,c语言编译时缺少头文件,库的解决办法
问题产生原因 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的 ...
- 编译时提示 Could NOT find OpenSSL 的解决方法
原文链接:https://www.jianshu.com/p/55249a0272ad 编译时提示如下的类似信息时: Could NOT find OpenSSL, try to set the pa ...
- apk 打包 java出错_AndroidApk混淆编译时,报告java.io.IOException...错误解决办法
在混淆编译之前,我的程序可以正常运行,混淆编译时,报告如下错误: Error:Execution failed for task ':gviews:transformClassesAndResourc ...
- linux c 编译时 include 和 链接库 文件路径指定
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...
- Linux下编译一个静态链接的程序的注意点
1. ld的-static开关加上之后,就可以编译出一个静态链接的程序了.要注意该程序用到的所有的库,都要有相应的.a版本,编译的时候作为一个source file放到命令行中即可.光有库的.so没用 ...
最新文章
- GBDT 和 AdaBoost区别?
- 阿里软件测试工程师手把手教学——自动化测试报告太丑,怎么办?
- WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版
- varint算法——本质上是牺牲最高位作为标识数据结束位,达到变长编码,说白了就是贪心的分割位...
- Android最佳的开源库(四)
- 斜面孔如何绘制_journal of neuroscience:面孔的神经表征与眼动模式相协调
- RediSQL 0.8.0 发布,将查询结果写入流中
- 递归 递归的案例 递归的案例
- fcntl函数之文件锁 F_SETLK
- 用java实现楼层导航_JS实现网站楼层导航效果代码实例
- 阿里巴巴为什么禁止使用Apache Beanutils进行属性复制?
- 软链接,xcode接lua文件夹
- 对象入参指定泛型类型_如何得到正确的MethodInfo对象当一个类使用泛型和泛型类型参数...
- 微软2012年突破重围 主攻Windows Phone
- 数据挖掘课程设计实战——基于Django开发的音乐推荐系统网站
- pr 无法启动因为计算机丢失,pramtlib.dll_“PR打不开,因为计算机丢失TimeWarpFilter.dll”是怎么回事?怎么办啊?_prccamtlib.dll...
- 构建自己的人脉网络——高科技人才在跨国大公司的生存之道(四)
- 关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)方法
- Hive的HQL的执行过程(怎么转换成MR、Spark等任务)
- 常用SQL语句 - 基于MySQL数据库