Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linker Error while using Vapor inside XCode Project #3121

Closed
nishant-dani opened this issue Dec 19, 2023 · 6 comments
Closed

Linker Error while using Vapor inside XCode Project #3121

nishant-dani opened this issue Dec 19, 2023 · 6 comments

Comments

@nishant-dani
Copy link

nishant-dani commented Dec 19, 2023

I am linking with the Vapor library pulling in the package through Package Dependencies in xcode Project, and then in my Target I link Binary with Libraries I am linking with Vapor. Vapor itself pulls in a lot of Swift packages including AsyncHTTPClient which in turn uses SwiftNIO. Somewhere along the build process, I am getting linker error and it fails to build AsynchHTTPClient and then in turn fails to build Vapor. Any tips on how I might figure this out?

Build output ld /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct.framework/Versions/A/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct normal (in target 'AsyncHTTPClient' from project 'async-http-client')

cd /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/SourcePackages/checkouts/async-http-client

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Xlinker -reproducible -target x86_64-apple-macos10.13 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -O0 -L/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Intermediates.noindex/EagerLinkingTBDs/Debug -L/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Intermediates.noindex/EagerLinkingTBDs/Debug -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -F/Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -filelist /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Intermediates.noindex/async-http-client.build/Debug/AsyncHTTPClient\ product.build/Objects-normal/x86_64/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct.LinkFileList -install_name @rpath/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct.framework/Versions/A/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct -Xlinker -rpath -Xlinker /usr/lib/swift -Xlinker -rpath -Xlinker /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks -Xlinker -object_path_lto -Xlinker /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Intermediates.noindex/async-http-client.build/Debug/AsyncHTTPClient\ product.build/Objects-normal/x86_64/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -Xlinker -debug_variant -fobjc-link-runtime -fprofile-instr-generate -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx -L/usr/lib/swift -lc++ -lz /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIO.framework/Versions/A/NIO /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/CNIOAtomics.framework/Versions/A/CNIOAtomics /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOConcurrencyHelpers.framework/Versions/A/NIOConcurrencyHelpers /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOBase64.framework/Versions/A/NIOBase64 /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/CNIODarwin.framework/Versions/A/CNIODarwin /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/CNIOLinux.framework/Versions/A/CNIOLinux /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/CNIOWindows.framework/Versions/A/CNIOWindows /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIODataStructures.framework/Versions/A/NIODataStructures /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/DequeModule.framework/Versions/A/DequeModule /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/Atomics_301F3DE065572157_PackageProduct.framework/Versions/A/Atomics_301F3DE065572157_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOCore.framework/Versions/A/NIOCore /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOEmbedded.framework/Versions/A/NIOEmbedded /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOPosix.framework/Versions/A/NIOPosix /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/Atomics_301F3DE065572157_PackageProduct.framework/Versions/A/Atomics_301F3DE065572157_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/Atomics_301F3DE065572157_PackageProduct.framework/Versions/A/Atomics_301F3DE065572157_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOHTTP1.framework/Versions/A/NIOHTTP1 /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/Atomics_301F3DE065572157_PackageProduct.framework/Versions/A/Atomics_301F3DE065572157_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/CNIOLLHTTP.framework/Versions/A/CNIOLLHTTP /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOHTTP2-3E0E01799A9AE6A0_PackageProduct.framework/Versions/A/NIOHTTP2-3E0E01799A9AE6A0_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOSSL_1A7227558E2D5E_PackageProduct.framework/Versions/A/NIOSSL_1A7227558E2D5E_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOHTTPCompression-21EAEB8A2236BA36_PackageProduct.framework/Versions/A/NIOHTTPCompression-21EAEB8A2236BA36_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOSOCKS_-3E0E01525182DF8F_PackageProduct.framework/Versions/A/NIOSOCKS_-3E0E01525182DF8F_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/NIOTransportServices_-42398F84C6D923F5_PackageProduct.framework/Versions/A/NIOTransportServices_-42398F84C6D923F5_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/Logging_35C93DA702091ECE_PackageProduct.framework/Versions/A/Logging_35C93DA702091ECE_PackageProduct /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/Atomics_301F3DE065572157_PackageProduct.framework/Versions/A/Atomics_301F3DE065572157_PackageProduct -Xlinker -dependency_info -Xlinker /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Intermediates.noindex/async-http-client.build/Debug/AsyncHTTPClient\ product.build/Objects-normal/x86_64/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct_dependency_info.dat -o /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Products/Debug/PackageFrameworks/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct.framework/Versions/A/AsyncHTTPClient_-49CA00D6DAD1AA54_PackageProduct -Xlinker -add_ast_path -Xlinker /Users/nishant/Library/Developer/Xcode/DerivedData/eipohub-apxkwtzpnwmidygvhoiftnlhxqvi/Build/Intermediates.noindex/async-http-client.build/Debug/AsyncHTTPClient.build/Objects-normal/x86_64/AsyncHTTPClient.swiftmodule
ld: Undefined symbols:

type metadata for NIOTLS.TLSUserEvent, referenced from:

AsyncHTTPClient.TLSEventsHandler.userInboundEventTriggered(context: NIOCore.ChannelHandlerContext, event: Any) -> () in AsyncHTTPClient.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

@0xTim
Copy link
Member

0xTim commented Dec 19, 2023

What version of Xcode and Swift? You might have to raise an issue on AsyncHTTPClient since this looks like an error in that repo

@nishant-dani
Copy link
Author

XCode version is Version 15.0.1 (15A507).
swift-driver version: 1.87.1 Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1)
Target: x86_64-apple-macosx13.0

Strangely enough the issue only shows up on the test Target, when it is it is importing XCTVapor. I looked into xcode and for the regular build it compiles using builtin-Swift-Compilation. However for the test Target it uses ld (linker) where the error shows up. It is not clear why xcode would have a different compilation process for the two Targets, and I have exhaustively compared the build settings.

I will however raise the issue on AsyncHTTPClient.

@vzsg
Copy link
Member

vzsg commented Dec 20, 2023

Oh, if it's about the test target, then it's actually a bug in SPM in Swift 5.9. I don't know if it's been fixed or not with Swift 5.9.2, but you could either try upgrading to Xcode 15.1, or apply a workaround in your Package.swift: duplicate all dependencies of your App target under the test target as well.

See here for an example, plucked from Duckie on the Discord server:

// swift-tools-version:5.9
import PackageDescription

let package = Package(
    name: "Backend",
    platforms: [
       .macOS(.v13)
    ],
    dependencies: [
        // :droplet: A server-side Swift web framework.
        .package(url: "https://github.com/vapor/vapor.git", exact: "4.87.1"),
        // :file_cabinet: An ORM for SQL and NoSQL databases.
        .package(url: "https://github.com/vapor/fluent.git", exact: "4.8.0"),
        // :elephant: Fluent driver for Postgres.
        .package(url: "https://github.com/vapor/fluent-postgres-driver.git", exact: "2.8.0"),
        // JWT
        .package(url: "https://github.com/vapor/jwt.git", exact: "4.2.2"),
        // Redis
        .package(url: "https://github.com/vapor/redis.git", exact: "4.10.0")
    ],
    targets: [
        .executableTarget(
            name: "App",
            dependencies: [
                .product(name: "Fluent", package: "fluent"),
                .product(name: "FluentPostgresDriver", package: "fluent-postgres-driver"),
                .product(name: "Vapor", package: "vapor"),
                .product(name: "JWT", package: "jwt"),
                .product(name: "Redis", package: "redis"),
                .product(name: "ALanguageParser", package: "accept-language-parser"),
                .product(name: "Fakery", package: "Fakery")
            ],
            swiftSettings: [
                .unsafeFlags(["-Xfrontend", "-strict-concurrency=complete"])
            ]
        ),
        .testTarget(name: "AppTests", dependencies: [
            .target(name: "App"),
            .product(name: "XCTVapor", package: "vapor"),

            // Workaround for https://github.com/apple/swift-package-manager/issues/6940
                .product(name: "Fluent", package: "fluent"),
                .product(name: "FluentPostgresDriver", package: "fluent-postgres-driver"),
                .product(name: "Vapor", package: "vapor"),
                .product(name: "JWT", package: "jwt"),
                .product(name: "Redis", package: "redis"),
                .product(name: "ALanguageParser", package: "accept-language-parser"),
                .product(name: "Fakery", package: "Fakery")
        ])
    ]
)

@nishant-dani
Copy link
Author

nishant-dani commented Dec 20, 2023 via email

@nishant-dani
Copy link
Author

nishant-dani commented Dec 20, 2023 via email

@0xTim
Copy link
Member

0xTim commented Dec 21, 2023

Will close this in favour of the AHC issue

@0xTim 0xTim closed this as not planned Won't fix, can't repro, duplicate, stale Dec 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants