質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

5706閲覧

自作したスタティックライブラリを使用するとビルド時に「duplicate symbol」エラーがでる

ENCOM_Kinoshita

総合スコア6

Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2015/04/27 09:06

お世話になります。

別アプリで使ったサードパーティーのフレームワーク(OtherFW.framework(仮))を使用しているソースを、
スタティックライブラリにして他のアプリに流用しようとしています。

タティックライブラリの作成まではできたのですが、
アプリにライブラリをリンクさせると下記エラーでうまくビルドできません。

プロジェクトの構成は下記のようになっています。
ワークスペース
|-スタティックライブラリのプロジェクト(libMyLibirary.aを作成
|-アプリのプロジェクト
|-Libs(OtherFW.framework設置場所)

lang

1duplicate symbol _OtherFWのクラス名1? in: 2 /スタティックライブラリの生成パス/libMyLibirary.a(MyClassA.o) 3 /スタティックライブラリの生成パス/libMyLibirary.a(MyClassB.o) 4duplicate symbol _OtherFWのクラス名2? in: 5 /スタティックライブラリの生成パス/libMyLibirary.a(MyClassA.o) 6 /スタティックライブラリの生成パス/libMyLibirary.a(MyClassB.o) 7・・・・・・・・ 8duplicate symbol _OtherFWのクラス名41? in: 9 /スタティックライブラリの生成パス/libMyLibirary.a(MyClassA.o) 10 /使用しているフレームワークのパス/OtherFW.framework/OtherFW(OtherFWClassA.o) 11duplicate symbol _OtherFWのクラス名42? in: 12 /スタティックライブラリの生成パス/libMyLibirary.a(MyClassA.o) 13 /使用しているフレームワークのパス/OtherFW.framework/OtherFW(OtherFWClassA.o) 14ld: 71 duplicate symbols for architecture arm64 15clang: error: linker command failed with exit code 1 (use -v to see invocation)>

アプリ側に設定していた「Other Linker Flags」の「-ObjC」を削除するとビルドはできるのですが、
NSClassFromStringをでクラス名を取得していた箇所がnilとなってしまい、期待させる動作ができません。

ar、lipoのコマンドで重複しているオブジェクトを消すと良いと見かけたのですが、
作成したライブラリのオブジェクトで被っているため消せません。

スタティックライブラリのプロジェクト、アプリのプロジェクト両方にOtherFW.frameworkをリンクさせています。

何か方法はないでしょうか・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

サードパーティーのフレームワークに含まれているヘッダに宣言されている変数がstaticになっておらず、
作成したフレームワークと、サードパーティーのフレームワークをアプリ側でリンクしたために重複して
「duplicate symbol」のエラーとなっていました。

サードパーティーのフレームワークの該当のヘッダに宣言されている変数にstaticをつけることで解決しました。

duplicate symbol 〜〜〜 in:
の〜〜〜はクラス名では無く変数だったのですね・・・

見てくださった方々ありがとうございました。

投稿2015/04/28 07:14

ENCOM_Kinoshita

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問