本人在win10下安装了mingw环境,以方面windows下测试gcc编译器构建一些开源组件。但是windows系统下遇到了一些编译问题。

1. 问题现象

  一次手写的Makefile遇到了如下编译错误:

1 $ make
2 g++ -I ../include -fPIC -c JpegDecoder.cpp -o JpegDecoder.o
3 g++ -o JpegDecoder JpegDecoder.o -L../libs -lcodec_utils
4 d:/ProgramFiles/mingw-w64/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lcodec_utils
5 collect2.exe: error: ld returned 1 exit status
6 make: *** [JpegDecoder] Error 1

  可是,在linux平台上编译这段代码完全没问题。。。见什么鬼了???

2. 错误原因分析

  直接提示表明,欲生成JpegDecoder的可执行文件,需要链接动态库libcodec_utils.so,但是找不到这个这个库文件,因此出现了这个链接错误提示。

3. 编译知识回顾

  一般理论常识是:-L参数指定了库的目录,-lxyz参数指定库名。例如,本次链接的动态名称为libcodec_utils.so,该库位于上级目录的libs文件夹下。

4. 疑问

  我再次确认,库目录和库文件都存在,Makefile写的应该没问题!况且在Linux平台下编译通过了!但为什么在win下还是报错???

5. 答案分析

  由于使用的连接器ld.exe是运行在window系统下的,可能跟linxu平台下的使用方法稍有区别。

  windows下查看命令行查看:ld --help,找到了一些链接参数信息:

  

  其中,-l LIBNAME表示,要写成-l libcodec_utils.so形式,而不能做一些省略,例如去掉“lib”和“.so”。(真正验证时,还不是这种情况!!!

  在Linux平台下,显示一样的信息。可能是linux平台下,将参数"-lcodec_utils"自动补全为"-l libcodec_utils.so"形式。

6. 验证结论

  6.1 参数形式:"-L../libs -lcodec_utils"

  

  6.2 参数形式:"-L../libs -l libcodec_utils.so"

  

  注意,错误提示跟6.1的稍微有些区别,系统自动添加了前缀"-l"到库名前,变成了"-llibcodec_utils.so"库找不到。

  6.3 参数形式:"-L../libs libcodec_utils.so"

  

  这是在windows平台下唯一的正确的参数。

mingw32环境下链接库找不到问题的更多相关文章

  1. Python3.5在Windows7环境下Scrapy库的安装

    Python3.5在Windows7环境下Scrapy库的安装 忙活了一下午,总算是把Scrapy库给装完了,记下来给需要帮助的人 首先安装的环境:Windows7 64位 Python的版本是:3. ...

  2. Anaconda环境下安装库

    使用anaconda环境下使用pycharm后,有些其他库也想安装,但开始在python.exe目录下安装没成功,因为pycharm用的环境已经不是原始的python.exe解释器了.就总结了一些安装 ...

  3. VS2013环境下Boost库配置

    序言 最近了解各大互联网公司的校招要求,发现了解Boost程序库也是不可或缺的一部分~ 于是,决定潜心研究下,这个准标准库~ 首先,在官网下载boost的最新版本Boost 1.59.0,这是当前的最 ...

  4. 解决thinkphp在开发环境下文件模块找不到的问题

    win10系统下,phpstudy开发环境下小问题描述: 找不到public公共模块. Not Found The requested URL /public/admin/login.html was ...

  5. AIX 环境下ODM库同步

    IBM AIX v5.3操作系统环境下有时会出现ODM库与rootvg硬盘上数据不同步的情况.使用命令lsvg -l datavg检查文件系统类型,发现显示为"???"这就表示OD ...

  6. Linux环境下stl库使用(vector)

    step1: #include <iostream> #include <vector> #include <string> using namespace std ...

  7. Linux环境下stl库使用(map)

    例子1: testMap.cpp #include <string.h> #include <iostream> #include <map> #include & ...

  8. Linux环境下c语言静态链接库和动态链接库创建和使用

    库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...

  9. Linux环境下的编译,链接与库的使用

    参考博客: http://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html http://m.blog.csdn.net/article/ ...

随机推荐

  1. 如何获取value值,获取属性值,设置属性值,

    1.获取select下拉框的value值,   2.获取select  的tid值 3.设置属性值  4.判断哪个单选框选中了 prop好像是判断的意思吧,个人理解勿喷谢谢!!!!!!

  2. JS常见加密混淆方式

    目录 前端js常见混淆加密保护方式 eval方法等字符串参数 emscripten WebAssembly js混淆实现 JSFuck AAEncode JJEncode 代码压缩 变量名混淆 字符串 ...

  3. shell-脚本开发基本规范及习惯

    1.shell-脚本开发基本规范及习惯 1.开头指定脚本解析器 #!/bin/sh 或#!/bin/bash 2.开头加版本版权等信息 #Date: 2018/3/26 #Author: zhangs ...

  4. [leetcode] 周赛 211

    比赛题目:https://leetcode-cn.com/circle/discuss/luvHfG/ 两个相同字符之间的最长子字符串 题目:5543. 两个相同字符之间的最长子字符串. 开始理解错题 ...

  5. centos8上安装phpmyadmin5

    一,下载phpmyadmin5: 1,官网地址: https://www.phpmyadmin.net/ 2,下载 [root@yjweb source]# wget https://files.ph ...

  6. sql查询:部门工资前三高的员工和部门工资最高的员工

    创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...

  7. centos6.8 架设 Telnet 服务

    centos6.8 架设 Telnet 非常简单 百度云下载RPM,然后上传到服务器 链接:https://pan.baidu.com/s/1w91HBf1TOJsZsqBMQnO7tA 提取码:au ...

  8. MVC实现修改数据

    前言 前言 最近没什么好写的,所以写个修改来巩固一下知识 控制器 public ActionResult UpdeteCartsNum(SYS_Carts sYS_Carts) { var list ...

  9. frida框架hook常用字符串模板总结

    ArrayBuffer转String: 解决中文乱码(模板) function ab2str(buf) { return new Uint16Array(buf) // encodedString = ...

  10. spring3.X版本知识点

    一.SpringMVC重点注解 @Controller 1.@Controller 与 @Component 实际应用中作用等价.     2.和Struct一样,也是单例,意味着被多个请求线程共享, ...