QtCreator:动态库是否真正生成了#34;动态"在Mac上

时间:2015-09-29 14:41:54

标签: c++ ios macos shared-libraries qt-creator

我在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

1 个答案:

答案 0 :(得分:0)

知道了。

对于Windows和Android目标,默认的库构建是动态的,所以除了{LF}之外我从来没有做过任何其他事情。在Mac上,默认情况下它是静态的。因此,要生成动态库(.dylib),您必须通过添加TEMPLATE += lib来请求它。

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