首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么库名在其名称中获得额外的0?

为什么库名在其名称中获得额外的0?
EN

Stack Overflow用户
提问于 2009-01-01 09:22:49
回答 3查看 1.5K关注 0票数 3

我有一个带有这样一个项目文件的小Qt项目:

代码语言:javascript
复制
TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH += .
INCLUDEPATH += .

CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h

当我通过qmake && nmake从它编译库时,它会生成文件

代码语言:javascript
复制
record32.obj
record320.lib
record320.dll
...

为什么要将额外的0添加到库和dll名称中?

生成的makefile似乎不是附加的,而是假设它,在Makefile.Release中它只是这样说:

代码语言:javascript
复制
####### Files

SOURCES       = recorder.cpp release\moc_recorder.cpp
OBJECTS       = release\recorder.obj release\moc_recorder.obj
DIST          = 
QMAKE_TARGET  = recorder
DESTDIR        = release\ #avoid trailing-slash linebreak
TARGET         = record320.dll
DESTDIR_TARGET = release\record320.dll

如何防止它并按我的意愿命名我的库?

(注意手动修复makefile.release不是一个可访问的解决方案)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-01 14:42:23

它来源于版本的第一部分。"lib“模板正在添加它。

将它包含在库名中是个好主意,因为它避免了在Windows上发生的臭名昭著的"DLL地狱“,在Windows上,这个约定没有得到一致遵守……通过命名包含主版本号的库文件,用户可以安装多个版本,程序将在运行时使用正确的版本。DLL版本不一定需要与整个项目发布版本相同。在Linux和OSX上,版本被附加到文件名(例如librecder.so.0.0.1)

如果使用VisualVisualC++,我也总是添加一个标记,指示我使用的Visual版本,因为由不同版本生成的代码基本上也是不兼容的。

也许您可以省略版本的定义来禁用这种行为,但是我现在无法验证Windows (在Linux上,共享库总是有版本号,它只是假设版本1.0.0)。

票数 7
EN

Stack Overflow用户

发布于 2016-03-15 12:19:46

试试这个:

代码语言:javascript
复制
CONFIG += skip_target_version_ext
票数 5
EN

Stack Overflow用户

发布于 2017-02-16 09:26:06

有用的把戏

代码语言:javascript
复制
VERSION = 0.0.1
win32:TARGET_EXT = .dll

有了这个,你会得到:

  • 在Linux上: librecord.so,.,libstor.so.0.0.1
  • 在Windows上: record.dll
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/404774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档