2016-10-02 69 views
3

swiftでスタティックライブラリ(.a)を使用したい3例:lib helloLib.aを ビルドして使用します。swiftで静的ライブラリ(.a)を使用する方法3

のhello.c

#include <stdio.h> 
#include "hello.h" 
int printHello() 
{ 
    printf("hello wourl"); 
    return 0; 
} 

hello.h

#include <stdio.h> 
int printHello(); 

ビルドへ:libHello.aおよび/ usr/local/libディレクトリ

コード迅速

モジュールにコピーします.modulemap

module hello [system] { 
    header "hello.h" 
    link "libhello" 
    export * 
} 

Package.swift

import PackageDescription 
let package = Package(
    name: "hello", 
    dependencies: [] 
) 

使用モジュールハローSWIFT(コマンド)と

main.swift

import hello 

printHello() 

ビルド:迅速なビルド

エラーが表示されます。

Compile Swift Module 'usehello' (1 sources)

Linking ./.build/debug/usehello

ld: library not found for -llibhello for architecture x86_64

:0: error: link command failed with exit code 1 (use -v to see invocation)

:0: error: build had 1 command failures

答えて

1

:あなたのようなコンパイラフラグを構築する必要があります。 https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.mdの行に沿って何かしましたか?あなたのディレクトリ構造は何ですか? hello.hはどこにありますか?

とにかく、エラーメッセージから判断すると、一つの問題は、あなたがmodule.modulemap

link "libhello" 

を使用することです。静的ライブラリの名前が何であるかは不明です。 helloLib.aとすることはできません。その名前はlibで始まる必要があります。それはlibhelloLib.aと呼ばれている場合は、モジュールのマップには

link "helloLib" 

でなければならないまた別の回答で提案されているよう-Xlinker -L/usr/local/libオプションを追加することもできます。

これが役に立ちます。

それは動作しません
+0

「-llibhello」を理解し、リンクに変更されません。 helloLib "、コンパイルはOKです。 ld:警告:オブジェクトファイル(/usr/local/lib/libhelloLib.a(hello.o))は、新しいOSXバージョン(10.11)用にビルドされていた(10.10)ためにビルドされました。 – duck

0

私は静的ライブラリが/ usr/local/libに見つからないと思います。私はあなたはそれが困難確実に答えを提供することができる、あなたが何をしたかについて多くの情報を、省略していると思います

swift build -Xcc -I/usr/local/include -Xlinker -L/usr/local/lib 
+0

、エラー:アーキテクチャはx86_64用-llibhelloが見つかりません > ライブラリは .Iは、「私はlibhelloLib.aにlibhello.aの名前を変更 – duck

関連する問題