我在MacOS下与QtCreator合作,为我的应用程序定位iPhone。现在,我正在尝试编译第三方库(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
答案 0 :(得分:0)
知道了。
对于Windows和Android目标,默认的库构建是动态的,所以除了{LF}
之外我从来没有做过任何其他事情。在Mac上,默认情况下它是静态的。因此,要生成动态库(.dylib),您必须通过添加TEMPLATE += lib
来请求它。
这会编译,但会在部署时崩溃。我在另一个帖子上发布了这个帖子:QtCreator for iOS: How to deploy a dylib shared library with my application