编译单线程v多线程和lib命名约定的重要性?

如何解决编译单线程v多线程和lib命名约定的重要性?

| [编辑] ==> 为了澄清,在将多个目标部署到同一目录的那些环境中,Planet Earth决定约定将\“
d
\”或\“
_d
\”或\“
_debug
\”附加到\“
DEBUG
\”版本(属于库或可执行文件)。可以将这样的约定视为“普遍存在”和“理解”,尽管(当然)不是每个人都这样做。 同样,要解决库的“共享”和“静态”版本之间的歧义,通常的约定是在静态和共享之间添加一些区别(例如对于共享导入,请使用\“
myfile.lib
\”)。 Windows上的lib)和Windows上的static-import-lib上的\“
myfile_s.lib
\”)。虽然Posix基于文件扩展名没有这种歧义,但是请记住,文件扩展名未在\“链接行\”上使用,因此,能够显式指定\“ static \”或\“ shared”同样有用。 \“版本的库。 出于这个问题的目的,\“
debug/release
\”和\“
static/shared
\”都被提升为“普遍存在的修饰文件名root \”。 问题:是否有任何其他部署配置被“提升”到这种“普遍存在的约定”级别,从而在文件目标根名称中变得显式? 我目前的猜测是“否”。要使答案为“是”,将需要:打算为给定目标使用多个配置(“使用”)(并因此将其部署到公共目录,这是该问题的假定基础)。 过去,我们编译了有无Web插件功能,该功能同样需要名称修饰,但是我们不再构建这些目标(因此,我不会断言为例)。同样,有时我们会编译有无多字节字符支持,但是我讨厌这样做,因此我也不会断言。 [原始问题] 我们正在建立要在各种语言和平台上应用的库命名约定/策略(例如,我们在不同的平台(包括C / C ++,C#,Java)上支持使用多种语言的混合产品。一个特殊的目标是确保除了传统的桌面(和嵌入式)应用程序之外,我们还要处理移动开发的目标/资源(对我们来说是新的)。 当然,一种选择是为来自不同构建配置的目标提供不同的路径。出于这个问题的目的,决定将所有目标共同放置在一个目录中,并“装饰”库/资源/可执行文件名称,以避免基于构建配置的冲突(例如,“ DEBUG” \“ v。” RELEASE \“,\”静态lib \“ v。\” shared / DLL \“等) 当前的决定与网络上的其他决定相似,我们在其中附加了标记以避免命名冲突:
  MyName.lib           (release build,import for shared/dll)
  MyName_s.lib         (release build,static lib)

  MyName_d.lib         (debug build,import for shared/DLL)
  MyName_ud.lib        (Unicode/wide-char,debug,import for shared/DLL)
  MyName_usd.lib       (Unicode/wide-char,static lib,debug)
(以上是Windows示例,但是这些策略类似地适用于我们的POSIX系统。) 这些基于:
  d     (release or debug)
  u     (ASCII or Unicode/wide-char)
  s     (shared/DLL or static-lib)
问题:我们没有必须编译为单线程的旧应用程序,我的理解是(与Microsoft不同,)POSIX系统可以将单线程和多线程目标链接到单个应用程序中而不会出现问题。考虑到当今对多核和多线程的推动,大型企业是否需要建立以下对象来确定“单线程”与“多线程”编译目标?
  t       (single-threaded or multi-threaded)  *(??needed??)*
...并且我们是否错过了其他任何目标冲突,例如在C ++上使用和不使用STL进行编译? 顺便说一句,Microsoft在以下位置具有库命名约定: http://msdn.microsoft.com/zh-CN/library/aa270400(v=vs.60).aspx及其DLL命名约定位于:http://msdn.microsoft.com/zh-cn/library/aa270964 (v = vs.60).aspx 一年前关于SO的类似问题,它没有讨论线程并且没有引用Microsoft约定,可以在以下位置找到:什么是MSVC dll,静态库和导入库的正确命名约定?     

解决方法

        您正在使用古老的编译器。无需在企业中建立这样的标准,供应商已经做到了。在过去的13年中,Microsoft尚未发布CRT的单线程版本。同样,Windows在过去的17年中一直是Unicode操作系统。这些天仍然编写Unicode不可知代码是没有意义的。 但是可以,常见的约定是为库的调试版本附加一个“ d”。并赋予库的DLL版本完全不同的名称。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-