如何设置VC2008使含boost库内容的程序输出为机器无关?

mzlogin 2009-05-03 08:50:37
这2天因为课程需要在看boost::asio库,
结果在编译运行官方文档里的chat实例时发现出来的exe在本机可以运行,
但到同学电脑上就不行,提示程序设置有问题无法运行。
后来想想应该是动态链接库的问题,
我编译出来的程序在运行时会加载我电脑里的很多dll,
含VC2008及boost里的内容,
其中的一些加载如下:

“chat_server.exe”: 已加载“D:\我的文档\Visual Studio 2008\Projects\chat_server\Debug\chat_server.exe”,已加载符号。
“chat_server.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll”
“chat_server.exe”: 已加载“C:\boost\lib\boost_system-vc90-mt-1_38.dll”,未使用调试信息生成二进制文件。
“chat_server.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcp90.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcr90.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\ws2_32.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\ws2help.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”
“chat_server.exe”: 已加载“C:\WINDOWS\system32\mswsock.dll”


请问应该如何设置VC,
使其将这些链接库在生成exe时都包含进去?以使其在别的没装VC2008及boost库的电脑上也能运行?
急求解答!!!
...全文
371 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
百变狸猫 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mzlogin 的回复:]
引用 3 楼 k1988 的回复:
……
定义 _MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。


请问如何做到?
[/Quote]
这个是正解.
lib文件可以使用预编译命令:
#pragma comment(lib,"libcmt");
_MT选项在:
项目-属性-配置属性-C/C++ - 代码生成 - 运行时库 - 选择多线程or多线程调试
mzlogin 2009-05-04
  • 打赏
  • 举报
回复
在VC2008里如何静态链接?
我昨天才开始用,
找了很久也没找到……
yshuise 2009-05-04
  • 打赏
  • 举报
回复
boost什么版本都有,你自己可以选择。
liliangbao 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Loaden 的回复:]
设置编译选项:/MT或/MTd
这样,就会链接boost的静态库了。
[/Quote]
Up
「已注销」 2009-05-04
  • 打赏
  • 举报
回复
设置编译选项:/MT或/MTd
这样,就会链接boost的静态库了。
Jalien 2009-05-04
  • 打赏
  • 举报
回复
方法一:
在C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
还有Microsoft.VC90.DebugMFC下的文件
把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。

方法二:
选择项目-》属性-》常规 右边有个MFC的使用,将其设为“在静态库中使用 MFC”或“使用标准 Windows 库”就可以了
九桔猫 2009-05-03
  • 打赏
  • 举报
回复
全静态链接再说
mzlogin 2009-05-03
  • 打赏
  • 举报
回复
更郁闷的是……
我发现就算是把编译器提示的所有加载过的dll拷到其它电脑上也还是不行……
烦躁!!!
mzlogin 2009-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 k1988 的回复:]
……
定义 _MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。
[/Quote]

请问如何做到?
  • 打赏
  • 举报
回复
使用静态库就是了。别用dll。
k1988 2009-05-03
  • 打赏
  • 举报
回复
msvcp90d.dll”
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。
单击“C/C++”文件夹。
单击“代码生成”属性页。
修改“运行时库”属性。
/MT
使应用程序使用运行时库的多线程静态版本。定义 _MT 并使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。


boost库应该有静态库可以使用,不需要使用动态库

jackyjkchen 2009-05-03
  • 打赏
  • 举报
回复
你给同学装上vs2008再发行组件包就行了
Paradin 2009-05-03
  • 打赏
  • 举报
回复
找看有没有设置为静态链接的选项

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧