找回密码
 加入我们
搜索
      
查看: 9307|回复: 33

[软件] 苹果M芯片下开发能否调用x86编译的.dll/.so动态链接库

[复制链接]
发表于 2023-3-6 14:53 | 显示全部楼层 |阅读模式
     如题,要做python和C++的策略交易,在MAC下面部署vscode、anaconda、mingw,调用的接口其中python接口是.dll,C++有.dll和.so可选,最后生成.exe,可以实现吗,请教各位开发大佬。
发表于 2023-3-6 14:57 | 显示全部楼层
这是进错论坛了?
发表于 2023-3-6 15:04 | 显示全部楼层
@YK50}NR([EOU}M59ZO@WAO.jpg
发表于 2023-3-6 15:04 | 显示全部楼层
mac有自己的动态链接库dylib,和so大差不差,不过很多细节是独有的,当年做一个跨平台的库这里最折磨人
发表于 2023-3-6 15:06 | 显示全部楼层
我以为就我来论坛吹水的,结果你们是认真的
发表于 2023-3-6 15:07 | 显示全部楼层
用crossover跑吧,直接是不行了
发表于 2023-3-6 15:25 来自手机 | 显示全部楼层
不行,建议用虚拟机,虚拟机跑ARM64的Windows,是可以运行x86/x86-64的程序的。
 楼主| 发表于 2023-3-6 15:39 | 显示全部楼层
ysc3839 发表于 2023-3-6 15:25
不行,建议用虚拟机,虚拟机跑ARM64的Windows,是可以运行x86/x86-64的程序的。

好的多谢,全套部署在虚拟机上开发这条路感觉有坑。。。
发表于 2023-3-6 15:41 来自手机 | 显示全部楼层
wimming 发表于 2023-3-6 15:39
好的多谢,全套部署在虚拟机上开发这条路感觉有坑。。。


不然其他方案就只有Wine/CrossOver了,或者虚拟机ARM64 Linux+qemu模拟,相比之下更坑。

vscode可以远程开发,问题不大。
 楼主| 发表于 2023-3-6 15:46 | 显示全部楼层
pcgsf22 发表于 2023-3-6 15:04
mac有自己的动态链接库dylib,和so大差不差,不过很多细节是独有的,当年做一个跨平台的库这里最折磨人 ...

现在是跨平台+跨芯片架构,我也感觉不太行,但想用MAC。。
发表于 2023-3-6 15:50 | 显示全部楼层
直接跑必然不行,别说系统库,CPU架构都换了。有源码自己编译都不一定行,大概率要做平台移植。(不然好多win的专业软件,重新MAC下编译一下不就移植了,既然没有,说明道路之险阻)
发表于 2023-3-6 15:50 来自手机 | 显示全部楼层
universal和x86二进制能调用x86库,但是为什么是windows的二进制格式?
发表于 2023-3-6 15:57 | 显示全部楼层
为什么要用arm的cpu开发x86的东西
先不说dll和exe这俩二进制文件就不可能在macOS下乖乖运行
你这目标客户端是win还是mac?
看着内容我怎么感觉像是要用win32开发mac的程序
发表于 2023-3-6 15:59 | 显示全部楼层
有源码要做移植再mac重新编译,或者DLL写的很好有类似
#if define(X86)
#elseif define(MAC)
这种跨平台的优化,重新编译一下就行


没源码大概率(99%)跑不过的
 楼主| 发表于 2023-3-6 16:00 | 显示全部楼层
xyzhangabc 发表于 2023-3-6 15:59
有源码要做移植再mac重新编译,或者DLL写的很好有类似
#if define(X86)
#elseif define(MAC)

没源码,我也感觉跑不过,不但跨系统还跨芯片,就是想用MAC了。。
发表于 2023-3-6 16:03 来自手机 | 显示全部楼层
用Rosetta运行编译流
发表于 2023-3-6 16:09 | 显示全部楼层
去 v2ex 问,这里是超频论坛,超频就是结果,至于为什么超频不在讨论之列
发表于 2023-3-6 16:10 | 显示全部楼层
差点以为进错论坛了,调试的时候装个linux吧,毕竟这是开发环境不是生产环境,后续部署也得上linux 或者windows 平台。
发表于 2023-3-6 16:25 | 显示全部楼层
我手上恰好也有个自己写的动态库,别说用 M 系列完全不同于 x86 的架构了,就算是 x86_64 同一架构下也不能实现 macOS 直接调用 .so .dll,必须老老实实地用 Xcode 编译 .dylib
 楼主| 发表于 2023-3-6 16:35 | 显示全部楼层
privater 发表于 2023-3-6 16:09
去 v2ex 问,这里是超频论坛,超频就是结果,至于为什么超频不在讨论之列

打不开~
发表于 2023-3-6 16:35 | 显示全部楼层
不可能的。动态库都是已经根据架构编译链接完成的可执行文件了,在arm下绝对不行的,确实可以像楼上说的在 arm windows虚拟机上运行,但是考虑的其他环境问题也是天坑
 楼主| 发表于 2023-3-6 16:37 | 显示全部楼层
fdhfdhd 发表于 2023-3-6 15:57
为什么要用arm的cpu开发x86的东西
先不说dll和exe这俩二进制文件就不可能在macOS下乖乖运行
你这目标客户端 ...

目标客户的电脑开发环境未知,刚好有个客户说它用的新买的苹果电脑。我这边只能提供X86的接口
 楼主| 发表于 2023-3-6 16:38 | 显示全部楼层
imyz 发表于 2023-3-6 16:25
我手上恰好也有个自己写的动态库,别说用 M 系列完全不同于 x86 的架构了,就算是 x86_64 同一架构下也不能 ...

我也觉得不行,不但跨系统还跨芯片架构,但客户用的苹果电脑,我给出否定答复的同时也要给个大概的解决方案。
 楼主| 发表于 2023-3-6 16:40 | 显示全部楼层
fangjiecover 发表于 2023-3-6 16:35
不可能的。动态库都是已经根据架构编译链接完成的可执行文件了,在arm下绝对不行的,确实可以像楼上说的在  ...

虚拟机里面也是运行的window arm和Linux arm的系统,虽说可以运行x86的软件,但兼容性不得而知,而且是在开发环境里调用window x86和linux x86编译的东西
发表于 2023-3-6 16:46 | 显示全部楼层
跑不了,新mac都是arm架构了,除非你原来的接口也有arm版本,不然就凉凉,当然如果有源码,重编下也不费事
发表于 2023-3-6 16:54 | 显示全部楼层
不光CPU指令不一样,连操作系统平台都不一样,linux下的库还好办,重新编译一下就行了
exe和dll肯定不能直接跑了,连Rosetta都不行,要么虚拟机装Win11ARM,要么crossover,先crossover再Rosetta,反正都要转译两次,有这功夫不如换个X86电脑拍Windows或者linux
发表于 2023-3-6 17:23 | 显示全部楼层
wimming 发表于 2023-3-6 16:38
我也觉得不行,不但跨系统还跨芯片架构,但客户用的苹果电脑,我给出否定答复的同时也要给个大概的解决方 ...

你提到的那个 .so .dll 是自己有源码的吗?若没基本就不必再费劲了,即使你最终成功,所付出的与你最终得到的肯定是不成正比的;若是有源码的,无非是在 macOS 下 Xcode 代码和库微调一下全新编译,这完全就是自己编程/语言功底的事儿了
发表于 2023-3-6 19:22 | 显示全部楼层
win下的dll,你不可能直接从macOS上调用吧,如果走虚拟,也要看arm的windows是否支持x86的dll,不然就要走模拟。
发表于 2023-3-6 20:36 | 显示全部楼层
源码交叉编译吧,linux下编内核经常搞的,应该不是什么难事,交叉编译器里有x86-linux-ld,可以链接吧,否则git上action生成那么多平台的可执行文件,难道都要找个原生机器,不过苹果的就不知道有没有完善的toolchain
 楼主| 发表于 2023-3-6 22:13 | 显示全部楼层
yajian2 发表于 2023-3-6 20:36
源码交叉编译吧,linux下编内核经常搞的,应该不是什么难事,交叉编译器里有x86-linux-ld,可以链接吧,否 ...

谢谢大佬指点
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-2-1 06:43 , Processed in 0.018800 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表