免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3582 | 回复: 3
打印 上一主题 下一主题

[C++] 请教个关于linux下使用make文件来编译代码的问题 [复制链接]

论坛徽章:
3
丑牛
日期:2013-11-13 10:22:35子鼠
日期:2013-11-18 18:10:04未羊
日期:2013-12-18 15:12:05
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-29 17:47 |只看该作者 |倒序浏览
大致是这样的 我要编译的代码A需要调用到很多MFC的内容,现在有一个实现好的可在linux下使用的MFC的包
我先把MFC的文件编译出两个动态库,比如:a.so b.so。然后存放在/home/MFC/bin目录下。

在编译代码A的时候,make文件里定义定义代码A的源文件目录DIR_A=“/home/test”,MFC的两个动态库的目录DIR_MFC=“/home/MFC/bin”
先是build 把A中的代码编出各种.o文件
然后在link的时候大致就像下面这行这样
g++ -g (编译宏) -o A.exe 各种.o文件 -L$(DIR_MFC) 。。。

在执行make文件时候build没问题 但是link时就报错各种undefined reference to XXX,XXX都是MFC里面定义的各种方法。

然后我如果把包含到方法在MFC中所在头文件和cpp文件给加到A的工作空间里并在make文件里也编译这些cpp文件就不报错了。

问题可能描述得比较凌乱,想问一下我如果要链接到那俩动态库的话我上面的写法是不是有错?
是只要-L$(DIR_MFC)呢还是需要-L$(DIR_MFC)/a.so -L$(DIR_MFC)/b.so还是另有写法?因为我改成后面那种写法的时候还是一样的报错。还有是不是可能是因为那俩动态库没编译好的原因造成这样报错呢?

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
2 [报告]
发表于 2013-09-29 19:58 |只看该作者
回复 1# demongunner


    动态库的名字不是随便取的,你应该编译的时候指定生成的名字是libXX.so这样子的,所以我这里假设你把你的两个.so分别改成了liba.so和libb.so,链接的时候指定的参数应该为-L$(DIR_MFC)  -la -lb
说明:-L只是告诉链接器去这个目录下找要链接的库,-l指定的才是实际要链接的库,但是它后面跟的不是库名,而是libXX.so 或者libXX.a里的那个XX

论坛徽章:
3
丑牛
日期:2013-11-13 10:22:35子鼠
日期:2013-11-18 18:10:04未羊
日期:2013-12-18 15:12:05
3 [报告]
发表于 2013-09-30 08:44 |只看该作者
回复 2# Monox


    动态库名字我是按照libXX.so命名的,问题里就拿a b代替了。。。
  一会去改下make文件试试你的方法,tks

论坛徽章:
3
丑牛
日期:2013-11-13 10:22:35子鼠
日期:2013-11-18 18:10:04未羊
日期:2013-12-18 15:12:05
4 [报告]
发表于 2013-09-30 09:45 |只看该作者
回复 2# Monox


    刚按照你说的改了下 解决了 仔细看了下make文件 里面只加了一个动态库 添上另外个就搞定了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP