免费注册 查看新帖 |

Chinaunix

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

[C++] 关于没有生成预期可执行文件的程序报错问题:undefined symbol in file..... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-01 14:54 |只看该作者 |倒序浏览
我在Solaris下编了一个程序。然后用g++编译出现下面图示的错误,我不清楚这是为什么。希望高手指点。
改错误提示中的函数,我全不都有用到。最终没有生成预期的可执行程序。然而却生成了四个扩展名为.o的文件
我总共编译了4个cpp文件具体命令是:
/g++ /A/NetShareSvr/main.cpp /A/NetShareSvr/WinToLinux.cpp /A/NetShareSvr/File.cpp /A/NetShareSvr/MessageProc.cpp

生成的扩展名为.o的4个文件


最后还想多问一下,我的Solaris终端总是隔一定时间就弹出一些莫名其妙的文字在终端屏幕上显示。怎样才能去除这个烦人的多余消息显示呢?
如下图显示:


还请高手多多指教啊!!!

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
2 [报告]
发表于 2012-11-01 16:49 |只看该作者
链接错误而已.

LZ少引用了某个库. -L选项指定库的搜索目录, -l选项把库加进去就可以了.

终端提示看下终端选项, 不然就是服务器那边的配置问题.

论坛徽章:
0
3 [报告]
发表于 2012-11-01 16:53 |只看该作者
captivated 发表于 2012-11-01 16:49
链接错误而已.

LZ少引用了某个库. -L选项指定库的搜索目录, -l选项把库加进去就可以了.

关键是引用什么库呢?这个库在什么位置呢?
高人知否?
我原来是在fedora上编写的这个程序,运行成功。但是在fedora上是在IDE codeblocks上编译的调试的。现在在Solaris上没有IDE只能靠g++输入搞定,很无助和迷茫。

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
4 [报告]
发表于 2012-11-01 17:00 |只看该作者

抱歉, 我不是无所不知的. 鬼才知道你引用了什么库. 在codeblock IDE下编译, 去看IDE中关于build的选项. codeblock背着你就搞了这么点小动作. 你要引用的库就是那个build相关选项里面列出来的. 把它拷贝到Solaris上. 如果运气好, 这个库兼容性很好, 那么按照2L的回复就能搞定这个问题.

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
5 [报告]
发表于 2012-11-01 17:01 |只看该作者
本帖最后由 captivated 于 2012-11-01 17:02 编辑

换句话说, 在fedora上不用codeblock, 用g++难道搞不定么.

论坛徽章:
0
6 [报告]
发表于 2012-11-01 17:48 |只看该作者
captivated 发表于 2012-11-01 17:01
换句话说, 在fedora上不用codeblock, 用g++难道搞不定么.

可视化的IDE毕竟不是调试方便一点,直观一点嘛,另外,我水平不高啊。

论坛徽章:
0
7 [报告]
发表于 2012-11-02 10:17 |只看该作者
captivated 发表于 2012-11-01 17:00
抱歉, 我不是无所不知的. 鬼才知道你引用了什么库. 在codeblock IDE下编译, 去看IDE中关于build的选项. c ...


我查了一下fedora上codeblocks的设置,没有额外的引用什么库。真是奇怪。
再者说了,那个recv和send什么的函数都是包含在指定头文件中的啊(#include <sys/types.h> ,#include <sys/socket.h> )!!!对不对???
我已经把该报含的头文件在代码中说明了啊!!!

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
8 [报告]
发表于 2012-11-02 13:15 |只看该作者
回复 7# tida01


    是的. 抱歉, 开始没注意符号. 这些符号都是POSIX标准规定的系统调用.

    如果没有包含头文件, 那么应该编译阶段(编译器cc1)就会报错了, 而不会等到链接阶段才报错.

    那么编译阶段通过, 证明Solaris系统上也有这些头文件; 也提供了同样的系统调用. 不过有个问题, 我不知道Solaris上的系统调用是以何种方式来提供的. 在Linux系统上是包含头文件直接调就可以了. 而Solaris系统上你可能需要调syscall, 然后通过系统调用号来调用 -- 不过我觉得这个猜测也很离谱...

    LZ你也可以试试加个编译选项 -lsocket试试. 如果-lsocket成功, 那么可能Solaris上的系统调用被 libsocket.so外覆了一层. 因为真正的系统调用实际上都是通过syscall通过系统调用号来调的.

    如果上述都不成功, 那我也不知道该如何是好, 对你的环境我不熟悉. 觉得这个问题很奇怪 -- Solaris上面无法"直接"调系统调用吗?

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
9 [报告]
发表于 2012-11-02 13:18 |只看该作者
@linux_c_py_php

帮忙看看这个怎么回事

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
10 [报告]
发表于 2012-11-02 13:34 |只看该作者
应该是没自动链上socket库,不过绝大多数linux上的gcc应该都不用手动链接这个。
试下-lsocket
http://bbs.chinaunix.net/thread-1302538-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP