【问题标题】:How to compile 64Bit DLL in Eclipse CDT (using Windows SDK)?如何在 Eclipse CDT 中编译 64Bit DLL(使用 Windows SDK)?
【发布时间】:2015-11-27 13:21:10
【问题描述】:

我想要做的:在win7 上创建一个64 位DLL,它与包括OLE32.dll 在内的Windows API 交互。

我得到了什么:

我目前卡住了。我下载了 Visual Studio 2015 社区版。我试图在那里创建一个 DLL,并在创建时生成了所有内容,但没有 dll。该程序没有抱怨,一切都按照教程设置,但没有 dll 文件。

所以我跳过了这个并下载了 Eclipse CDT。我使用 Visual C 工具链进行设置,并在出现小问题后生成了我的 DLL。所以我使用 Java 启动它,但它抱怨(我使用 JNA 进行集成)并且它接缝我有一个 32 位 DLL。

所以我搜索了网络并阅读并做了一些事情,但我完全迷失了。由于 Visual Studio 2010 Express 版没有 64 位编译器,我什至不确定 Visual Studio 的社区版这次是否支持 64 位 dll。

我还安装了 Windows SDK v7.1。我链接到一个库文件 ole32.dll。它包含我需要的 CoCreateInstance 方法。我必须手动添加它才能让编译器拾取它。如果我切换到 64 位 dll 版本,编译器会抱怨 CoCreateInstance 方法无法链接。

所以基本上我在这里迷路了。网络上的一个消息来源为 2010 Express 无法创建 x64 DLL 提供了解决方法,结果表明提示正在获取 windows SDK,因为它带有编译器。

我还注意到 CDT 使用 Visual Studio 10 文件,所以我猜它正在使用这个编译器。

我将 /machine:64 选项设置为编译器和链接器。但是链接器仍然抱怨编译器的 obj 文件是 32 位的。

有什么想法吗?

[更新]

编译器打印以下行,因此基本上它无法编译 64 位版本。知道如何更换它吗?如前所述,它使用 Visual Studio 10 文件夹,但我也有一个 Visual Studio 12 和 14 文件夹。

cl : 命令行警告 D9002 : 忽略未知选项 '/machine:x64'

【问题讨论】:

    标签: c++ eclipse dll 64-bit eclipse-cdt


    【解决方案1】:

    好吧,我不认为 '/machine:x64' 是 cl 选项,但它是链接器选项之一。

    如果你想用 windows sdk 或 Visual Studio 环境制作一些 dll。

    我不确定我的解决方案是否适合你的解决方案,这是我为我的 64 位项目使用 eclipse 和 windows sdk 7.1 编译所做的。

    我有两个 32 位和 64 位霓虹灯版本的 Eclipse IDE。 我选择一个 64 位的。您可以查看我关于安装here 的答案之一。在我看来,它们的任何版本都可以。这是你的选择。

    第一步。从开始菜单运行“Windows SDK 7.1 命令提示符”。

    然后,使用以下命令更改 64 位开发级别后,在命令窗口中启动我的 eclipse。

    第二步。为我的项目设置路径变量。 我有自己的带有属性窗口的项目。

    在我看来,重要的变量似乎是 LIB 和 PATH 变量。

    我交叉检查了这两个变量,一个来自windows SDK的提示窗口,另一个是安装后的当前设置变量。

    此处为 SDK 变量

    我的最终变量是

    LIB:
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319;
    C:\Windows\Microsoft.NET\Framework\v4.0.30319;
    C:\Windows\Microsoft.NET\Framework64\v3.5;
    C:\Windows\Microsoft.NET\Framework\v3.5;;
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Lib\amd64;
    C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\X64
    
    PATH: 
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319;
    C:\Windows\Microsoft.NET\Framework\v4.0.30319;
    C:\Windows\Microsoft.NET\Framework64\v3.5;
    C:\Windows\Microsoft.NET\Framework\v3.5;;
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools;;
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\amd64;
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\VCPackages;;
    C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\x64;
    C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64;
    C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin;;
    C:\Windows\system32;C:\Windows;
    C:\Windows\System32\Wbem;
    C:\Windows\System32\WindowsPowerShell\v1.0\;
    

    第三,我修改了我的链接器标志,如下图所示。

    最后,我成功编译了我的项目。

    这是我的构建日志。

    信息:内部构建器用于构建

    cl /c /EHs /MD /Zi /nologo /Foutil.obj "..\util.c"

    rc /Fo proc_view.res "..\proc_view.rc"

    Microsoft (R) Windows (R) 资源编译器版本 6.1.7600.16385 版权所有 (C) 微软公司。保留所有权利。

    cl /c /EHs /MD /Zi /nologo /Foprocss.obj "..\procss.c"

    链接 /machine:x64 /debug /nologo /OUT:Systemer.exe FreeList.obj LinkedList.obj proc_main.obj proc_view.res procss.obj util.obj Kernel32.lib Psapi.lib User32.lib

    最后一个使用 dumpbin 命令检查我的可执行文件是 64 位还是 32 位。

    就是这样。

    我认为带有 MinGW 或 cygwin 的 Eclipse 可能是更好的选择。

    我希望这适合你。

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 2016-10-29
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多