写多线程的时候,编译的时候遇到了问题,开始的时候是这样的:

编译器不认识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 编译时手动链接遇到的问题(未解决)相关推荐

  1. lat_mem_rd 内存延迟测试工具原理,lmbench编译时llseek链接不到问题解决

    命令介绍: 说明页: LAT_MEM_RD(8) manual page lat_mem_rd是lmbench中的一个工具,它的主要作用是测试内存访问的延迟. 源码地址: https://github ...

  2. Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换

    Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换 一.各操作系统下文件换行符 二.TortoiseGit下载Github代码关闭文件换行符 三.示例说明 1.开启换行符自动 ...

  3. Linux kernel编译时编译选项多选一如何固化在config文件

    每次在进行裁剪的Linux kernel编译时,都会碰到有提示,让你在某些编译选项多选一,如: Initialize kernel stack variables at function entry ...

  4. linux内核编译时bad register name `%dil'错误

    在ubuntu 10.04下编译2.6.23内核时,出现了如下错误: boot.h112行如下: gcc嵌入汇编限定符的意义: r表示可以选任何寄存器,结果在编译时选了dil寄存器,这个好像是x86_ ...

  5. c语言编译说文件不存在,c语言编译时缺少头文件,库的解决办法

    问题产生原因 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的 ...

  6. 编译时提示 Could NOT find OpenSSL 的解决方法

    原文链接:https://www.jianshu.com/p/55249a0272ad 编译时提示如下的类似信息时: Could NOT find OpenSSL, try to set the pa ...

  7. apk 打包 java出错_AndroidApk混淆编译时,报告java.io.IOException...错误解决办法

    在混淆编译之前,我的程序可以正常运行,混淆编译时,报告如下错误: Error:Execution failed for task ':gviews:transformClassesAndResourc ...

  8. linux c 编译时 include 和 链接库 文件路径指定

    C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...

  9. Linux下编译一个静态链接的程序的注意点

    1. ld的-static开关加上之后,就可以编译出一个静态链接的程序了.要注意该程序用到的所有的库,都要有相应的.a版本,编译的时候作为一个source file放到命令行中即可.光有库的.so没用 ...

最新文章

  1. GBDT 和 AdaBoost区别?
  2. 阿里软件测试工程师手把手教学——自动化测试报告太丑,怎么办?
  3. WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版
  4. varint算法——本质上是牺牲最高位作为标识数据结束位,达到变长编码,说白了就是贪心的分割位...
  5. Android最佳的开源库(四)
  6. 斜面孔如何绘制_journal of neuroscience:面孔的神经表征与眼动模式相协调
  7. RediSQL 0.8.0 发布,将查询结果写入流中
  8. 递归 递归的案例 递归的案例
  9. fcntl函数之文件锁 F_SETLK
  10. 用java实现楼层导航_JS实现网站楼层导航效果代码实例
  11. 阿里巴巴为什么禁止使用Apache Beanutils进行属性复制?
  12. 软链接,xcode接lua文件夹
  13. 对象入参指定泛型类型_如何得到正确的MethodInfo对象当一个类使用泛型和泛型类型参数...
  14. 微软2012年突破重围 主攻Windows Phone
  15. 数据挖掘课程设计实战——基于Django开发的音乐推荐系统网站
  16. pr 无法启动因为计算机丢失,pramtlib.dll_“PR打不开,因为计算机丢失TimeWarpFilter.dll”是怎么回事?怎么办啊?_prccamtlib.dll...
  17. 构建自己的人脉网络——高科技人才在跨国大公司的生存之道(四)
  18. 关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)方法
  19. Hive的HQL的执行过程(怎么转换成MR、Spark等任务)
  20. 常用SQL语句 - 基于MySQL数据库

热门文章

  1. 混合类型数据格式化输入
  2. c语言双向链表 快速排序,双向链表的快速排序(swift版本)
  3. maven的pom介绍及配置
  4. 原生js实现浏览器全屏和退出全屏
  5. JVM系列(三)— Java内存模型
  6. 如何用jQuery获得select的值
  7. 连接不上mysqlworkbench问题解决方法
  8. 汇编语言:第三章 寄存器(内存访问)
  9. 常用SQL语句(增删查改、合并统计、模糊搜索)
  10. 11.22Daily Scrum(2)