无法解析的外部符号问题小结

无法解析的外部符号问题小结问题1:在编写通信相关程序中,引用了一个静态库(该静态库编译没有问题,并被其他项目引用),该库是对SOCKET的一个封装。基本结构如下: 在属性中添加了该库的引用后,编译仍然报错,错误如下:safmq2005.lib(tcpsocket.obj):errorLNK2019:无法解析的外部符号_gethostbyname@4,该符号在函数”publ

大家好,又见面了,我是你们的朋友全栈君。

问题1:在编写通信相关程序中,引用了一个静态库(该静态库编译没有问题,并被其他项目引用),该库是对SOCKET的一个封装。基本结构如下:
无法解析的外部符号问题小结 



在属性中添加了该库的引用后,编译仍然报错,错误如下:

safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _gethostbyname@4,该符号在函数 “public: __thiscall tcpsocket::Socket::Socket(char const *,short)” (??0Socket@tcpsocket@@QAE@PBDF@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _inet_addr@4,该符号在函数 “public: __thiscall tcpsocket::Socket::Socket(char const *,short)” (??0Socket@tcpsocket@@QAE@PBDF@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _WSAGetLastError@0,该符号在函数 “public: __thiscall tcpsocket::Socket::Socket(char const *,short)” (??0Socket@tcpsocket@@QAE@PBDF@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _socket@12,该符号在函数 “public: __thiscall tcpsocket::Socket::Socket(char const *,short)” (??0Socket@tcpsocket@@QAE@PBDF@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _send@16,该符号在函数 “public: virtual unsigned int __thiscall tcpsocket::Socket::send(char const *,unsigned int)” (?send@Socket@tcpsocket@@UAEIPBDI@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _recv@16,该符号在函数 “public: virtual unsigned int __thiscall tcpsocket::Socket::receive(char *,unsigned int)” (?receive@Socket@tcpsocket@@UAEIPADI@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _closesocket@4,该符号在函数 “public: virtual void __thiscall tcpsocket::Socket::close(void)” (?close@Socket@tcpsocket@@UAEXXZ) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _getpeername@12,该符号在函数 “public: virtual void __thiscall tcpsocket::Socket::getPeerName(struct sockaddr_in *)” (?getPeerName@Socket@tcpsocket@@UAEXPAUsockaddr_in@@@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _getsockopt@20,该符号在函数 “private: void __thiscall tcpsocket::BufferedSocket::init(int)” (?init@BufferedSocket@tcpsocket@@AAEXH@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _listen@8,该符号在函数 “public: __thiscall tcpsocket::ServerSocket::ServerSocket(short,unsigned long,int)” (??0ServerSocket@tcpsocket@@QAE@FKH@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _bind@12,该符号在函数 “public: __thiscall tcpsocket::ServerSocket::ServerSocket(short,unsigned long,int)” (??0ServerSocket@tcpsocket@@QAE@FKH@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _setsockopt@20,该符号在函数 “public: __thiscall tcpsocket::ServerSocket::ServerSocket(short,unsigned long,int)” (??0ServerSocket@tcpsocket@@QAE@FKH@Z) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _accept@12,该符号在函数 “public: class tcpsocket::Socket __thiscall tcpsocket::ServerSocket::acceptConnection(void)” (?acceptConnection@ServerSocket@tcpsocket@@QAE?AVSocket@2@XZ) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _WSAStartup@8,该符号在函数 “public: __thiscall _WSAINIT::_WSAINIT(void)” (??0_WSAINIT@@QAE@XZ) 中被引用
1>safmq2005.lib(tcpsocket.obj) : error LNK2019: 无法解析的外部符号 _WSACleanup@0,该符号在函数 “public: __thiscall _WSAINIT::~_WSAINIT(void)” (??1_WSAINIT@@QAE@XZ) 中被引用


后来发现,在stdafx.h文件中添加如下语句就OK了
#include<WinSock.h> #prama comment(lib, "ws2_32.lib")

就OK了。

结构如下:
无法解析的外部符号问题小结 

但是ws2_32.lib已经在原有项目中包含了。为什么还要再包含一次呢。


初步解释:
静态库只是把自己工程的文件编译成.obj文件,再将.obj文件整合成静态库,其中并没有包含ws2_32.lib.所有要
在AppProject中包含ws2_32.lib.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153497.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vim怎么高亮显示_vim配置教程

    vim怎么高亮显示_vim配置教程经常使用SecureCRT在linux下修改一些配置文件,使用vi打开总是一个颜色,找起来比较头大。因为vi不支持高亮,所以需要使用vim。安装vim:yuminstall-yvim(ubuntu使用apt-get)全局(所有用户)vim配置文件路径:/etc/vimrc当前用户vim配置文件路径:~/.vimrc如果存在该文件,则备份一下,以免以后找不到。在vimrc文件中输入:synta…

    2022年9月29日
    2
  • 达梦数据库分区表的使用

    达梦数据库分区表的使用前言在大型的企业应用或企业级的数据库应用中,要处理的数据量通常达到TB级,对于这样的大型表执行全表扫描或者DML操作时,效率是非常低的。为了提高数据库在大数据量读写操作和查询时的效率,达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。达梦数据库分区表主要包括范围…

    2022年5月26日
    64
  • 安装 | MATLAB2020a (64位) 安装教程及安装包下载链接[通俗易懂]

    安装 | MATLAB2020a (64位) 安装教程及安装包下载链接[通俗易懂]博主github:https://github.com/MichaelBeechan博主CSDN:https://blog.csdn.net/u011344545Matlab2020a链接:链接:https://pan.baidu.com/s/1SfoNj2FC4XMfIbJluRuhUA提取码:解压密码:rjzkgzh<!!!!!!!!打赏后私信我,获取提取码!!!!!!!!!!!!!>打赏链接:https://blog.csdn.net/u011344545/artic

    2022年5月20日
    45
  • Pycharm自动调整代码格式的快捷键Alt+Ctrl+L

    Pycharm自动调整代码格式的快捷键Alt+Ctrl+L1、代码自动填充空格2、自动对齐代码3、符合PEP8规范

    2025年7月13日
    3
  • 服务器系统详细安装步骤图_服务器系统安装教程详细步骤

    服务器系统详细安装步骤图_服务器系统安装教程详细步骤一、首先按住ctrl+alt+delete进行对KVM的重启操作,在进行重启的过程中按F2,进入BIOS界面,对RAID进行磁盘阵列:1、选择DeviceSetting,进入界面后选择RAIDControllerinSlot4:进行操作。2、先选择VirtualDiskManagement命令,查看系统是否已经进行了磁盘阵列。(如果已经存在进行步骤3,如果未存在进行步骤4)3、按Esc返回上一级,选择ConfigurationManagem…

    2022年9月28日
    3
  • OpenProcessToken

    OpenProcessTokenOpenProcessToken  要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执行OpenProcess(PROCESS_ALL_ACCES

    2022年6月25日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号