質問

このような小さなQtプロジェクトと次のようなプロジェクトファイルがあります:

TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH += .
INCLUDEPATH += .

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

qmake&&によってライブラリをコンパイルするときnmake 、ファイルになります

record32.obj
record320.lib
record320.dll
...

追加の0がlibおよびdll名に追加されるのはなぜですか?

生成されたメークファイルは追加されていないように見えますが、 Makefile.Release では次のようになっています:

####### 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を手動で修正することは、アクセシブルなソリューションではないことに注意してください)

役に立ちましたか?

解決

バージョンの最初の部分から来ています。 " lib" TEMPLATEが追加しています。

IMOでは、悪名高い「DLL Hell」を回避するため、ライブラリ名に含めることをお勧めします。この規則が一貫して守られていないWindowsで起こります...メジャーバージョン番号を含むようにライブラリファイルに名前を付けると、ユーザーは複数のバージョンをインストールでき、プログラムは実行時に正しいバージョンを使用します。 DLLバージョンは、必ずしもプロジェクトのリリースバージョン全体と同じである必要はありません。 LinuxおよびOSXでは、バージョンはファイル名に追加されます(例:librecorder.so.0.0.1)

[Visual C ++を使用している場合、異なるバージョンで生成されたコードはほとんど互換性がないため、使用したVisual Cのバージョンを示すタグも常に追加します。]

たぶん、VERSIONの定義を省略してこの動作を無効にすることもできますが、Windowsの場合(Linuxでは、共有ライブラリは常にバージョン番号を持っているので、バージョン1.0.0を想定しています)

他のヒント

これを試してください:

CONFIG += skip_target_version_ext

便利なトリック

VERSION = 0.0.1
win32:TARGET_EXT = .dll

これにより、以下が得られます。

  • Linuxの場合:librecord.so、...、librecord.so.0.0.1
  • Windows:record.dll
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top