QtCreator:动态库是否真的在 Mac 上生成 "dynamic"

QtCreator: Are dynamic library generated really "dynamic" on a Mac

我正在 MacOS 下使用 QtCreator 为我的应用程序定位 iPhone。现在,我正在尝试编译第 3 方库 (tinyxml)。

我的 .pro 文件已经适用于 Linux、Windows 和 Android 目标,我只是想将它扩展到 iOS.

我的第一个惊喜是生成的动态库有一个.a扩展名。不应该是 .so(甚至是 `.dynlib)吗?

我的第二个惊喜是,当我生成带和不带CONFIG += staticlib的库时,它总是生成相同的二进制文件(实际上,相同的大小,内容被报告为不同,但它可能只是SONAME 标签)。在所有其他平台上,静态和动态库二进制文件的大小始终不同。

我做错了什么吗?我实际上总是静态生成库吗(这将解释扩展总是 .a),如果是这样,如何强制动态生成?

动态 .pro 文件:

#Generated by SDE CMake scripts!
CONFIG(release, debug|release) {
TARGET = tinyxml
}

CONFIG(debug, debug|release) {
TARGET = tinyxml-g
}

QT -= core

QT -= gui

CONFIG(debug, debug|release) {
DEFINES += _DEBUG
}

win32: DEFINES += TINYXML_EXPORTS

SOURCES +=  \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinystr.cpp \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinyxml.cpp \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinyxmlerror.cpp \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinyxmlparser.cpp

TEMPLATE = lib

INCLUDEPATH +=  \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/./tinyxml

静态 .pro 文件:

#Generated by SDE CMake scripts!
CONFIG(release, debug|release) {
TARGET = tinyxmls
}

CONFIG(debug, debug|release) {
TARGET = tinyxmls-g
}

QT -= core

QT -= gui

CONFIG(debug, debug|release) {
DEFINES += _DEBUG
}

win32: DEFINES += TINYXML_EXPORTS

QMAKE_CXXFLAGS += -DTINYXML_STATIC

SOURCES +=  \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinystr.cpp \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinyxml.cpp \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinyxmlerror.cpp \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/src/tinyxmlparser.cpp

TEMPLATE = lib

CONFIG += staticlib

INCLUDEPATH +=  \ 
/Users/less/Documents/dev/vobs_ext/libcpp/tinyxml/./tinyxml

知道了。

对于 windows 和 Android 目标,默认的库构建是动态的,所以除了 TEMPLATE += lib 之外,我从来不需要放置任何其他东西。在 Mac 上,默认情况下它是静态的。因此,要生成动态库 (.dylib),您必须通过添加 CONFIG += shared.

来请求它

这可以编译,但在部署时会崩溃。我在另一个线程上发布了这个:QtCreator for iOS: How to deploy a dylib shared library with my application