4

ARM 用の GCC ( Red Suite 4 NXP ) を使用しています。最終的なアプリケーションに使用する静的ライブラリ ファイル (.a) をコンパイルしています。すべての開発者がまったく同じ静的ライブラリ出力を生成できるように、プロジェクトを構成する必要があります。(これは主に、新しい開発者がセットアップが正しいことを確認できるようにするためです。) プロジェクトのコピーが 2 つあります (SVN からの 2 つのチェックアウト)。それぞれをビルドすると、スタティック ライブラリの .a 出力ファイルに絶対パス情報が含まれていることに気付きます。これは、SVN が変更として検出することを意味します。ar -D (決定論的) オプションを既に使用しています。パス情報を削除する他のオプションはありますか? gcc -s を試しましたが、これは機能しませんでした (これはライブラリではなく、最終的な実行可能ファイルのみのようです)

絶対パスが .a のどこに/なぜあるのかわかりませんが、誰かが私を正しい方向に向けることができれば、より多くの情報を提供できます。

strip ユーティリティの man ページを見ましたが (まだ試していません)、このパス情報は削除されますか?

また、私は Red Suite を使用してプロジェクトを管理しているので、Red Suite のやり方で物事を行おうとしています (そして、Red Suite に任せようとしています)。ただし、gcc または ar オプションを調整する必要がある場合は、その方法を知っています。どのオプションを変更すればよいかわかりません。

ビルド コンソールの出力を次に示します。これにより、プロジェクトの絶対パスが結果の .a に含まれます。それが私が修正しようとしているものです。

**** Build of configuration Release for project lib_touch ****

make -j all 
Building file: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/Touch.c
Building file: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchCalibration.c
Building file: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchPoint.c
Building file: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchEventQueue.c
Invoking: MCU C Compiler
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DNDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC177x_8x -I"C:\Users\my_user_name\Documents\My Project Verification build\src\build\RedSuite4NXP\CMSISv2p00_LPC177x_8x\inc" -I../../../../board -I../../../../board/lpc1788 -I../../../../communication -I../../../../events -I../../../../geometry -I../../../../graphics -I../../../../hmilogic/include -I../../../../sound -I../../../../util -O3 -Wall -Werror -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -std=gnu99 -mcpu=cortex-m3 -mthumb -MMD -MP -MF"touch/Touch.d" -MT"touch/Touch.d" -o"touch/Touch.o" "C:/Users/my_user_name/Documents/My Project Verification build/src/touch/Touch.c"
arm-none-eabi-gcc -D__REDLIB__ -DNDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC177x_8x -I"C:\Users\my_user_name\Documents\My Project Verification build\src\build\RedSuite4NXP\CMSISv2p00_LPC177x_8x\inc" -I../../../../board -I../../../../board/lpc1788 -I../../../../communication -I../../../../events -I../../../../geometry -I../../../../graphics -I../../../../hmilogic/include -I../../../../sound -I../../../../util -O3 -Wall -Werror -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -std=gnu99 -mcpu=cortex-m3 -mthumb -MMD -MP -MF"touch/TouchCalibration.d" -MT"touch/TouchCalibration.d" -o"touch/TouchCalibration.o" "C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchCalibration.c"
Invoking: MCU C Compiler
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DNDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC177x_8x -I"C:\Users\my_user_name\Documents\My Project Verification build\src\build\RedSuite4NXP\CMSISv2p00_LPC177x_8x\inc" -I../../../../board -I../../../../board/lpc1788 -I../../../../communication -I../../../../events -I../../../../geometry -I../../../../graphics -I../../../../hmilogic/include -I../../../../sound -I../../../../util -O3 -Wall -Werror -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -std=gnu99 -mcpu=cortex-m3 -mthumb -MMD -MP -MF"touch/TouchEventQueue.d" -MT"touch/TouchEventQueue.d" -o"touch/TouchEventQueue.o" "C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchEventQueue.c"
Finished building: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/Touch.c
arm-none-eabi-gcc -D__REDLIB__ -DNDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC177x_8x -I"C:\Users\my_user_name\Documents\My Project Verification build\src\build\RedSuite4NXP\CMSISv2p00_LPC177x_8x\inc" -I../../../../board -I../../../../board/lpc1788 -I../../../../communication -I../../../../events -I../../../../geometry -I../../../../graphics -I../../../../hmilogic/include -I../../../../sound -I../../../../util -O3 -Wall -Werror -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -std=gnu99 -mcpu=cortex-m3 -mthumb -MMD -MP -MF"touch/TouchPoint.d" -MT"touch/TouchPoint.d" -o"touch/TouchPoint.o" "C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchPoint.c"

Finished building: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchEventQueue.c
Finished building: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchCalibration.c


Finished building: C:/Users/my_user_name/Documents/My Project Verification build/src/touch/TouchPoint.c

Building target: lib_touch.a
Invoking: MCU Archiver
arm-none-eabi-ar -rD "lib_touch.a"  ./touch/Touch.o ./touch/TouchCalibration.o ./touch/TouchEventQueue.o ./touch/TouchPoint.o   
c:\code_red\RedSuiteNXP_4.3.0_1033\redsuite\tools\bin\arm-none-eabi-ar.exe: creating lib_touch.a
Finished building target: lib_touch.a

make --no-print-directory post-build
Performing post-build steps
arm-none-eabi-size "lib_touch.a" ; cp "lib_touch.a" "../../../../lib/lib_touch.a"; # arm-none-eabi-objdump -h -S "lib_touch.a" >"lib_touch.lss"
   text    data     bss     dec     hex filename
   1864       0     156    2020     7e4 Touch.o (ex lib_touch.a)
    576       0       0     576     240 TouchCalibration.o (ex lib_touch.a)
    320       0       0     320     140 TouchEventQueue.o (ex lib_touch.a)
     96       0       0      96      60 TouchPoint.o (ex lib_touch.a)

更新: 詳細情報

さらに掘り下げたところ、完全なファイルパスが文字列定数の前にあるようです。.a ファイル内のパス データは、

C:/Users/my_user_name/Documents/My Project Verification build/src/touch/Touch.c.TouchIdleTimer

ファイル Touch.c 内に文字列リテラル "TouchIdleTimer" があります。これが原因ですか?パス部分を削除するにはどうすればよいですか、それとも可能ですか? ティア

4

1 に答える 1

2

アップデート

GCCへのこの回答を介して:いくつかのライブラリのみを静的にリンクする

注: .so ファイルのフル パスを使用すると、再び動的にリンクされます。


Code Red IDE v4 での静的ライブラリ サポートの強化: 静的ライブラリ プロジェクトの作成

-fPIC検索すると、またはの候補が表示され-fpicます。あなたと同様の質問に答えて、このコメント スレッドで推奨されました。

3.2 共有ライブラリーと静的ライブラリーは、共有ライブラリーと静的ライブラリーのコンパイルの優れた内訳を提供します。

共有ライブラリではなく静的であると述べましたが、念のため:共有ライブラリの作成方法

于 2013-02-07T01:44:27.857 に答える