免费注册 查看新帖 |

Chinaunix

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

[C++] 菜鸟的编译问题 [复制链接]

论坛徽章:
1
戌狗
日期:2013-10-24 17:31:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-25 21:49 |只看该作者 |倒序浏览
我简单写了个调用boost_program_option解析命令行参数的c++程序。我把编译选项放makefile.am中,可以编译并正常使用
option_main_SOURCES=./option_main.cpp
option_main_CXXFLAGS=-I../boost -ggdb -Wall -O0
option_main_LDADD=-lboost_program_options  
option_main_LDFLAGS=-L../boost/stage/lib


但我直接使用g++编译,为啥不行呢?编译命令为:
g++ -I../boost -ggdb -Wall -O0   -L../boost/stage/lib  -lboost_program_options -o option_main option_main.cpp

报一大堆错误:
/tmp/ccYy1zuQ.o: In function `main':
/home/sequoiadb/emeralddb/src/option_main.cpp:10: undefined reference to `boost::program_options:ptions_description::m_default_line_length'
/home/sequoiadb/emeralddb/src/option_main.cpp:10: undefined reference to `boost::program_options:ptions_description::m_default_line_length'
/home/sequoiadb/emeralddb/src/option_main.cpp:10: undefined reference to `boost::program_options:ptions_description:ptions_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)'
/home/sequoiadb/emeralddb/src/option_main.cpp:17: undefined reference to `boost::program_options:ptions_description::add_options()'
/home/sequoiadb/emeralddb/src/option_main.cpp:17: undefined reference to `boost::program_options:ptions_description_easy_init:perator()(char const*, boost::program_options::value_semantic const*, char const*)'
/home/sequoiadb/emeralddb/src/option_main.cpp:18: undefined reference to `boost::program_options:ptions_description_easy_init:perator()(char const*, boost::program_options::value_semantic const*, char const*)'
/home/sequoiadb/emeralddb/src/option_main.cpp:20: undefined reference to `boost::program_options:ptions_description_easy_init::operator()(char const*, char const*)'
/home/sequoiadb/emeralddb/src/option_main.cpp:23: undefined reference to `boost::program_options::variables_map::variables_map()'
/home/sequoiadb/emeralddb/src/option_main.cpp:26: undefined reference to `boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)'
/home/sequoiadb/emeralddb/src/option_main.cpp:27: undefined reference to `boost::program_options::notify(boost::program_options::variables_map&'

论坛徽章:
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 [报告]
发表于 2014-05-25 22:21 |只看该作者
回复 1# syzxlyx


    既然使用makefile.am可以正常编译,那你执行make的时候是会输出到底是用的什么参数来编译option_main.cpp的,你把那个输出和你手工调用g++时候的参数比较一下大概就知道为什么了。



















(根据出错提示,多半是路径指定出错)

论坛徽章:
0
3 [报告]
发表于 2014-05-26 11:00 |只看该作者
本帖最后由 幻の上帝 于 2014-05-26 11:02 编辑

没事别把-l放.o前面。
↑眼残无视……
makefile里怎么调用g++的?

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
4 [报告]
发表于 2014-05-26 11:01 |只看该作者
make file 都是可以调试的, 能看到make 的详细过程, 比较一下就知道了。

论坛徽章:
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
5 [报告]
发表于 2014-05-26 15:46 |只看该作者
看到上面提到-I的位置,我突然想起来,有时候-l(小写的ell)参数得放在后面才行(没去做验证,只记得以前碰到明明路径指定对的还提示找不到什么符号的时候就移动-l到最后就解决问题了)。这个你可以试试。
当然就像我在二楼,以及四楼的朋友说的一样,对比一下make实际编译的时候参数是怎样子的就知道哪里有问题了。

论坛徽章:
1
戌狗
日期:2013-10-24 17:31:55
6 [报告]
发表于 2014-05-27 11:15 |只看该作者
ok.谢谢各位了!成功了。是-l位置不对。

论坛徽章:
0
7 [报告]
发表于 2014-06-12 10:52 |只看该作者
你缺的symbol是往后找,如果找到要用的symbol并又引起新的missing symbol就继续往后找。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP