vs2010中对pragma comment (linker...)的选项设置问题

zwk602 2014-04-04 10:18:50
	
#ifdef LOAD_DEF
#define DLLTEST_API
#pragma comment (linker, "/DEF:\"../Library/DLLTest.def\"") // 给链接器指定DEF文件,以改变导出函数名
#else
#define DLLTEST_API __declspec(dllexport) // 不改变导出函数名
#endif

// 以下是导出函数声明
DLLTEST_API void fn1 (xxxxx);

以上代码在VC6.0中没问题,VS2010直接给出:
warning LNK4229: invalid directive '/DEF:../Library/DLLTest.def' encountered; ignored
然后忽略def文件,导致dll完全没输出。

补充说明:在创建DLL的工程中,由于我要根据一个宏LOAD_DEF来判断是采用__declspec(dllexport)导出,还是采用def文件导出,因此,无法在工程属性的linker->input里面直接指定DLLTest.def文件。
...全文
730 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwk602 2014-04-04
  • 打赏
  • 举报
回复
补充一点的是:虽然MSDN 98写了"Do not specify this option within the development environment;",但在VC6.0中设置该连接器选项,程序仍然能够加载def文件,并输出相应的重命名接口函数。
zwk602 2014-04-04
  • 打赏
  • 举报
回复
首先感谢zhao老师及时的回复,可学生还有一些不明之处,望老师能加以点拨一、二: 1. VS2010的MSDN关于#pragma comment的描述为:

#pragma comment( comment-type [,"commentstring"] )
linker Places a linker option in the object file. You can use this comment-type to specify a linker option instead of passing it to the command line or specifying it in the development environment. For example, you can specify the /include option to force the inclusion of a symbol:

#pragma comment(linker, "/include:__mySymbol")
Only the following ( comment-type) linker options are available to be passed to the linker identifier: /DEFAULTLIB /EXPORT /INCLUDE /MANIFESTDEPENDENCY /MERGE /SECTION 里面似乎没有/DEF选项供用户自定义,而我不想通过IDE来设置def文件的具体加载信息,即,我想让代码除了makefile以外的部分,不再依赖开发环境。 2. vs 2010的log显示的就是: DLLTest.obj : warning LNK4229: invalid directive '/DEF:../Library/DLLTest.def' encountered; ignored 因而,用denpency查看该dll发现,由于没有引入def文件,该dll没有导出任何接口函数。 3. VC6一切正常。
赵4老师 2014-04-04
  • 打赏
  • 举报
回复
VS20XX: 看.log文件的内容 VC6: 看.plg文件的内容
赵4老师 2014-04-04
  • 打赏
  • 举报
回复
MSDN2008: 全部折叠全部展开 代码:全部 代码:多个 代码:Visual Basic 代码:C# 代码:Visual C++ 代码:J# 代码:JScript Visual Basic C# Visual C++ J# JScript Visual C++ 链接器选项 /DEF(指定模块定义文件) 请参见 发送反馈意见 复制代码 /DEF:filename 备注 其中: filename 要传递到链接器的模块定义文件 (.def) 的名称。 备注 /DEF 选项将模块定义文件 (.def) 传递到链接器。只有一个 .def 文件可以指定给 LINK。有关 .def 文件的详细信息,请参见模块定义文件。 在 Visual Studio 开发环境中设置此链接器选项 打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。 单击“链接器”文件夹。 单击“输入”属性页。 修改“模块定义文件”属性。 若要从开发环境内指定 .def 文件,应将它连同其他文件一起添加到项目,然后将该文件指定给 /DEF 选项。 以编程方式设置此链接器选项 请参见 ModuleDefinitionFile。 请参见 概念 设置链接器选项 链接器选项 发送反馈意见,就此主题向 Microsoft 发送反馈意见。 MSDN98: /DEF (Specify Module-Definition File) Home | Overview | How Do I | Linker Options Syntax /DEF:filename This option passes a module-definition (.DEF) file to the linker. Only one .DEF file can be specified to LINK. For details about .DEF files, see Module-Definition Files. When a .DEF file is used in a build, no matter whether the main output file is an .EXE file or a DLL, LINK creates an import library (.LIB) and an export file (.EXP). These files are created regardless of whether the main output file contains exports. Do not specify this option within the development environment; this option is for use only on the command line. To specify a .DEF file, add it to the project along with other files.
VS2010 + OpenCV2.4.3 + Windows Form Application (注意:如需引用本文请征得本人许可!) (原创)OpenCV在VS2010的Windows Form Application 的实现 以下为本人亲自验证过,含详细具体的安装编译及注意事项,完全可供参考!希望可以帮到OPENCV的爱好者(尤其是新兵)少走弯路.如需源码可邮件询索(后附). VS2010 + OpenCV2.4.3 ==================================================== 一.OpenCV的编译安装: 1.解压OpenCV-2.4.3.exe -> D:/OpenCV/Resources/OpenCV-2.4.3/opencv 2.运行CMake...为VS编译... Where is the source code(源码): D:/OpenCV/Resources/OpenCV-2.4.3/opencv Where is build the binaries(目标): D:/OpenCV/Resources/OpenCV-2.4.3/opencv/vs2010 Configure: 选择 Visual Studio 10/? Generate: 生成目标 3.打开D:/OpenCV/Resources/OpenCV-2.4.3/opencv/vs2010,用对应版本的VS打开OpenCV.sln... A.编译OpenCV方案Debug版本: 1,编译OpenCV方案(Debug): 在VS工作区界面左侧方案浏览器(Solution Explorer)最顶项方案"Solution 'OpenCV' (61 projects)",确定Solution Configure为Debug,右键执行Build Soluton(编译方案); 2,编译ALL_BUILD项目(Debug): 在VS工作区界面左侧方案浏览器(Solution Explorer)列表项目"ALL_BUILD",确定Solution Configure为Debug,右键执行Build(编译项目); 3,编译CMakeTargets\INSTALL项目(Debug): 在VS工作区界面左侧方案浏览器(Solution Explorer)列表"CMakeTargets\INSTALL"项目,确定Solution Configure为Debug,右键执行Build(编译项目); B.编译OpenCV方案Release版本: 1,编译OpenCV方案(Release): 在VS工作区界面左侧方案浏览器(Solution Explorer)最顶项方案"Solution 'OpenCV' (61 projects)",确定Solution Configure为Release,右键执行Build Soluton(编译方案); 2,编译ALL_BUILD项目(Release): 在VS工作区界面左侧方案浏览器(Solution Explorer)列表项目"ALL_BUILD",确定Solution Configure为Release,右键执行Build(编译项目); 3,编译CMakeTargets\INSTALL项目(Release): 在VS工作区界面左侧方案浏览器(Solution Explorer)列表"CMakeTargets\INSTALL"项目,确定Solution Configure为Release,右键执行Build(编译项目); 4.检查编译后的结果: D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\bin: 有Debug/Release两目录及相关文件资源; D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\lib: 有Debug/Release两目录及相关文件资源; D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\install: 有bin/include/lib三目录及相关文件资源; 其它可不要求 5.应用配置: a.将编译好的目录D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\install复制到C:\,并改名为C:\opencv; b.增加OSXP系统变量Path: c:\opencv\bin (供OpenCV的exe应用程序调用); c.增加OSXP系统变量OPENCV: 值为: C:\opencv; -------------------------

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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