- 主题:科学计算混编的问题
intel和msvc虽然都有llvm backend 但是 用不同backend编译的静态库能不能混链 这个问题我内外搜了一下 没有明确答案
【 在 BigCarrot 的大作中提到: 】
: 我的意思是用clang/llvm
:
--
修改:ziqin FROM 183.137.216.*
FROM 183.137.216.*
【 在 ziqin 的大作中提到: 】
: intel和msvc虽然都有llvm backend 但是 用不同backend编译的静态库能不能混链 这个问题我内外搜了一下 没有明确答案
这个不用想, 基本不可能, 正如前面说的, 同一家编译器的不同版本都做不到, 更不用说这种不同实现的。
C++语言很复杂, 语言层面以外, 很多实现细节, 根本没有规范, 各家实现各家的,
但是, 混用就是鸡同鸭讲。
举个简单例子, 多态函数, 规范就是函数名一样, 参数不一样。
但是, 到了链接层面, 它们就是不同的函数, 实现方法, 基本都是在函数名上扩展参数后缀,
张三FUNCA_AA_BB_CC, 李四 FUNCA@@AA@@BB@@CC, 王五 FUNCA_FA_FB_BC,
同样包含头文件, 各自按照各自内部实现规范找要链接的函数体, 别家的静态库根本找不到。
--
FROM 124.126.0.*
【 在 ziqin 的大作中提到: 】
: 项目里有一部分实时性要求比较高的部分,需要用到intel cpu的各种高级特性,msvc只支持avx512一个,其他都不支持,所以这部分必须要用intel的compiler编译
: 项目底层构架的代码,比如异步框架,网络框架,protobuf, absl这些都是用msvc编译的,想用intel的编译器编译各种问题。
: 问题是,怎么样能把这两部分连在一起,我的理解是用static library肯定是不行了,其他有什么办法么?实在不想用dynamic library的方案
开源的库自己统一用一致的编译器编译才是正道, 只不过要处理不同编译器有差异的宏,还有使用的平台相关的宏。 还有一些编译器选项的对应和差异处理。
--
FROM 124.126.0.*
c abi是统一的,c++不行
【 在 ziqin 的大作中提到: 】
: intel和msvc虽然都有llvm backend 但是 用不同backend编译的静态库能不能混链 这个问题我内外搜了一下 没有明确答案
: 【 在 BigCarrot 的大作中提到: 】
: : 我的意思是用clang/llvm
: ...................
--
FROM 114.246.236.*
算法核心函数一两个,手搓汇编可以吗,用icc生成汇编,翻译下MASM,拷贝到cpp代码里,用msvc编译。相当于手动链接了。
多的话,这么干不可取,维护成本太高了。提成一个动态库也不错。
【 在 ziqin 的大作中提到: 】
: 现在的build构架的确就是你说的这样
: 你说的方案我的理解是不可行的 不同编译器出来静态库的abi不一样 混链要出问题 甚至msvc同一个编译器 不同版本之间abi都不向下兼容
: 事实上 科学计算里 最重要的就是数据结构内存连续性和cpu指令的使用 用和不用速度能差100倍
: ...................
--
FROM 61.185.158.*
VS2015以后可以了。官网写的。
【 在 poggy 的大作中提到: 】
:
: 这个不用想, 基本不可能, 正如前面说的, 同一家编译器的不同版本都做不到, 更不用说这种不同实现的。
: C++语言很复杂, 语言层面以外, 很多实现细节, 根本没有规范, 各家实现各家的,
: ...................
--
FROM 61.185.158.*