VS项目迁移到linux环境中Makefile相关小问题集锦
来源:互联网 发布:淘宝店铺标志尺寸 编辑:程序博客网 时间:2024/06/05 08:04
背景
有些库只能在linux环境中运行,导致的结果,就是整个项目需要迁移到linux的环境,所以需要Makefile.
过程
关于Makefile的修改分为了三个阶段,由Makefile.am和Makefile.in 自动生成Makefile;修改代码后,将原来.c修改成.cpp后,如何修改Makefile.in;添加库之后,如何修改Makefile。在这三个阶段中,遇到了一些问题。
阶段一:自动生成Makefile。
参考:
1. Makefile.am和makefile.in生成Makefile
2. autotools的简单用法
大致包括如下命令:
autoscan
aclocal
autoconf
autoheader
automake
然后就自动生成了configure文件,之后./configure,自动生成Makefile。
注意:在autotools的使用过程中,除了源代码以外,必须的文件只有两个 configure.ac 和 Makefile.am。
阶段二:.c 修改成.cpp 如何修改Makefile.in
直接思路就是把所有的.c 替换成 .cpp即可。问题就来了,依旧是make失败,报错提示是xxx.c 无法找到。已经修改了makefile 中所有的xxx.c,还是这个报错,很绝望。
继续查看Makefile文件,以及存在的各种配置文件,后来终于发现是一个隐藏的 .deps中有xxx.c,应该是Makefile生成的一个中间文件,修改了.deps之后,Make成功了,谢天谢地。
总结: 自动生成的Makefile中,可能存在中间结果,显示所有的隐藏文件,对照着Makefile查看,最简单方式是删除这些中间文件,重新由Makefile生成,当然前提是确定这些隐藏的文件是中间文件,可以自动生成。
阶段三:添加库
Makefile 中需要注意的两个参数:LIBS、LDFLAGS,还有includedir。
LDFLAGS:lib路径
LIBS: 要link的东西
报错:../../src/libFLAC/.libs/libFLAC.so: undefined reference to `makeIrredPoly(long, long)’
出现这个问题的原因,是lib的link过程出错了,有两个可能的原因:一、lib路径出错,二、lib路径中对应的.a不存在。排除这两个问题之后,就没问题了。
补充
- 关于Makefile生成,VS项目迁移到linux下,可以直接根据VS相关生成文件中编译路径之类的数据,自己写一个简易的Makefile,这是另一思路,应该会更加高效和机智;
- 自动生成的Makefile超级长,看起来超级累,如果有问题,或者进行一些修改,工作量很大,当还是懵懂的阶段,难度有点大。根据报错提示查找背后的原因,然后慢慢就会接近make done了。
- debug Makefile的时候,可以通过make -n来查看当前目录下make命令,自动生成的Makefile中,基本都是变量值,超级难看懂。
- VS项目迁移到linux环境中Makefile相关小问题集锦
- VS项目工程环境相关问题
- Oracle中存储过程迁移到Mysql的问题集锦
- Java windows项目迁移到linux上,遇到一些跟路径相关的问题
- windows迁移linux问题集锦
- windows迁移linux问题集锦
- windows迁移linux问题集锦
- windows项目迁移到linux中异常
- 项目从tomcat迁移到weblogic环境下问题汇总----不断补充中ing...
- 从win到linux的小问题集锦(不断更新中)
- Windows C++迁移Linux C++问题集锦
- 项目迁移到Linux WebLogic遇到的问题与解决
- 项目迁移 windows到linux
- Eclipse项目迁移到Studio中存在的问题
- 项目从intellij idea迁移到eclipse中问题总结
- vs环境配置相关问题
- Linux学习小问题集锦
- linux 小问题&解决办法集锦
- python文件的写入write()
- H2数据库入门Demo(一)
- OOP,重写与重载,异常处理机制,多线程,集合框架,IO流 -- Java基础复习
- hdu 1272 小希的迷宫
- 生成对抗网络DCGAN+Tensorflow代码学习笔记(二)----utils.py
- VS项目迁移到linux环境中Makefile相关小问题集锦
- cuda-covnet 深度学习工具的权值转化为txt 方便cpp源码调用
- 吴恩达Coursera机器学习课程笔记-定义分类
- QT中使用webView控件时报错
- 最大似然估计(MLE)和最大后验概率(MAP)
- QQ聊天气泡拖动效果实现
- 不想去读spring庞大源码,欲了解其内部原理来读此文
- RabbitMQ入门教程(四):工作队列(Work Queues)
- Makefile的规则