aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-06-19 22:52:01 -0700
committerJake Petroules <jake.petroules@qt.io>2017-06-21 16:01:32 +0000
commit85291c80a8bd6c8fc0930d756be71df8e88b3cf5 (patch)
tree506efbf90d4f05250de5b2df079b7baaf7634aa4
parentea68e550ea17353e43f220b510f990a0adeb871b (diff)
Fix shared library linking on Apple platforms using ld64
When using the system linker, we must pass -dylib. -dynamiclib is a Clang/GCC driver option which is not recognized by ld64. Change-Id: Idc52e4f57864ab468a9a84cc15d3b4a29a8a09bb Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/modules/cpp/gcc.js13
1 files changed, 12 insertions, 1 deletions
diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js
index 23d01d106..b25372918 100644
--- a/share/qbs/modules/cpp/gcc.js
+++ b/share/qbs/modules/cpp/gcc.js
@@ -242,7 +242,18 @@ function linkerFlags(project, product, inputs, output, linkerPath) {
var i, args = additionalCompilerAndLinkerFlags(product);
if (output.fileTags.contains("dynamiclibrary")) {
- args.push(isDarwin ? "-dynamiclib" : "-shared");
+ if (isDarwin) {
+ args.push((function () {
+ var tags = ["c", "cpp", "objc", "objcpp", "asm_cpp"];
+ for (var i = 0; i < tags.length; ++i) {
+ if (linkerPath === product.cpp.compilerPathByLanguage[tags[i]])
+ return "-dynamiclib";
+ }
+ return "-dylib"; // for ld64
+ })());
+ } else {
+ args.push("-shared");
+ }
if (isDarwin) {
var internalVersion = product.cpp.internalVersion;