GHC找不到与mingw gcc(但mingw-w64)不兼容的外部库(libjack.lib)

问题描述 投票:0回答:1

目标:

[我正在Windows 10上使用堆栈和jackhackage的绑定编写haskell程序。 Jack已安装,其lib / include路径已提供给ghc。我的目标是使用堆栈构建程序。

问题:

当我运行stack build时,我看到:

Building all executables for 'hsjack' once  ...
Glasgow Haskell Compiler, Version 8.6.5, stage 2 booted by GHC version 8.6.2
Cabal-simple_Z6RU0evB_2.4.0.1_ghc-8.6.5.exe: Missing dependencies on foreign
libraries:
* Missing (or bad) C libraries: jack64, jack64 ...
While building package hsjack-0.1.0.0 using:
     C:\sr\setup-exe-cache\x86_64-windows\Cabal-simple_Z6RU0evB_2.4.0.1_ghc-8.6.5.exe ... 
        --extra-include-dirs=C:\Users\jvall\Tools\jackpackage\includes ...  
        --extra-lib-dirs=C:\Users\jvall\Tools\jackpackage\lib...
    Process exited with code: ExitFailure 1

我已经省去了一些没意思的部分(用'...'表示)。您可以看到包含该库和包含文件的路径,并且我确定这些库(libjack.lib,libjack64.lib)和头文件位于这些目录中。我尝试在package.yaml中的- jack下指定- jack64extra-libraries:都没有区别。当然,extra-include-dirsextra-lib-dirs是在stack.yaml中指定的。

程序版本和其他上下文:

Windows 10

> jackd --versionjackdmp 1.9.11我安装了jack website上可用的JACK2 64位二进制文​​件。C:/.../ jackpackage / includes / jack的内容:jack.h,其他* .h文件C:/../ lib的内容:libjack.def,libjack.lib,libjack64.def,libjack64.lib。 (加上无关的libjackserver文件。没有.dll)

> stack --version版本2.3.1,Git修订版de2a7b694f07de7e6cf17f8c92338c16286b2878(8103次提交)x86_64 hpack-0.33.0

>堆栈执行程序-ghc --versionGlorious Glasgow Haskell编译系统,版本8.6.5]

>堆栈执行-gcc --versionrealgcc.exe(Rev1,由MSYS2项目构建)7.2.0

使用mingw时> gcc --versiongcc.exe(MinGW.org GCC Build-20200227-1)9.2.0

使用mingw-w64时> gcc --versiongcc.exe(x86_64-posix-seh-rev0,由MinGW-W64项目构建)8.1.0

可能的重复项:

[有很多类似的SO帖子,但是我发现没有一个可以为我的案例提供解决方案。绝大多数只是缺少适当的库或程序(1234)。我的问题似乎是由* .lib文件与mingw-w64和gcc的MSYS2版本之间的不兼容引起的。

调试尝试:

为了验证.lib文件是否完全正常,我编写了一个使用它们的简单c程序。使用mingw提供的gcc时,程序可以编译并正确运行,但是使用mingw-w64 gcc或stack exec gcc时,程序无法运行。使用堆栈执行程序的样本输出(大写缩写):

stack exec -- gcc .\test.c -o .\test -I C:\...\includes -L C:\...\lib -ljack64

Target: x86_64-w64-mingw32  
Thread model: posix  
gcc version 7.2.0 (Rev1, Built by MSYS2 project)  
...  
path-to-stack//stack//x86_64-windows//ghc-8.8.3//mingw//bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/collect2.exe  ....  -LC:\\Users\\jvall\\Tools\\jackpackage\\lib ....  
path-to-stack//stack//x86_64-windows//ghc-8.6.5//mingw//bin/ld.exe: cannot find -ljack64  
collect2.exe: error: ld returned 1 exit status

mingw-w64和stack exec gcc都以相同的方式失败。一切都很好,直到他们找不到图书馆。使用-m64 / -m32和-ljack / -ljack64不会更改任何内容。我知道Jack2库是用C ++编写的,并且已经阅读到MSVC C ++库与mingw不兼容,但是这并不能解释mingw-w64不兼容时mingw如何成功编译。这是否相关,还是我应该专注于此问题的haskell / stack方面?

任何想法在这里发生了什么?如何使用Jack绑定使用堆栈来编译haskell程序?我试图做到周全,但是如果我有任何遗漏,请告诉我。对于重载此代码的haskell和c程序,我只有极少数的示例,但是问题已经很长了。

目标:我正在Windows 10上使用堆栈和来自黑客的杰克的绑定编写haskell程序。 Jack已安装,其lib / include路径已提供给ghc。我的目标是建立...

windows haskell gcc linker-errors jack
1个回答
0
投票

更新

© www.soinside.com 2019 - 2024. All rights reserved.