cannot link to static library

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

cannot link to static library

ソリューションへジャンプ
3,506件の閲覧回数
mike1974
Contributor III

I have created a library in one project, but I can't seem to link to it in another project which uses it.

 

I have done:

 

Properties --> C/C++ Build --> Settings --> Tool Settings --> Libraries -->

 

  1) added name of library in the -I field, without .a extension or "lib" prefix

  2) added libraries physical location in the -L field.

 

I am still getting "undefined reference" to functions which I have double checked are in fact in the library.

 

Am I missing a something?

 

--Mike

ラベル(1)
0 件の賞賛
返信
1 解決策
2,949件の閲覧回数
mike1974
Contributor III

Hmm I just noticed I'm using "ObjectList" ( a text file) as the input of .o files to use.  I did this to get around the Windows command line limit (8192 chars).  I just saw this morning on mcuoneclipse.com that there is a fix for that.  I wonder if this could be causing it?

元の投稿で解決策を見る

0 件の賞賛
返信
8 返答(返信)
2,949件の閲覧回数
mike1974
Contributor III

I should add, that I'm compiling C++ code, and the library is all C code.  So perhaps that's the issue?

0 件の賞賛
返信
2,949件の閲覧回数
BlackNight
NXP Employee
NXP Employee

Hi Michael,

are you using properly

extern "C"

for everything you interface from C++ to C?

Erich

0 件の賞賛
返信
2,949件の閲覧回数
mike1974
Contributor III

Hi Erich,

Yes, the library I'm building is a GUI from Segger, it should build fine with a C++ application.  Each .h file in the GUI has:

#if defined(__cplusplus)

extern "C" {     /* Make sure we have C-declarations in C++ programs */

#endif

Furthermore, I was already building the entire GUI as part of my C++ application.  It compiled and linked fine, but it was too many files, so I decided to make the GUI a library and link to it.

0 件の賞賛
返信
2,949件の閲覧回数
BlackNight
NXP Employee
NXP Employee

If you run the 'nm' utility (Defining Variables at Absolute Addresses with gcc | MCU on Eclipse), do you see the proper symbols?

Erich

0 件の賞賛
返信
2,949件の閲覧回数
mike1974
Contributor III

Erich, I downloaded the new make (and rm and echo) as instructed here:

Solving the 8192 Character Command Line Limit on Windows | MCU on Eclipse

Now, I can link.  However, the linker complains that the library I'm using does not have VFP (vector floating point) register arguments, but that my application does.  Apparently this prevents me from linking. 

So, do you know where the setting is that allows me change my library to use VFP arguments as well?

2,949件の閲覧回数
mike1974
Contributor III

Found the setting, it's

Properties --> C/C++ Build --> Settings --> Target Processor --> Float ABI.  

I set it to "FP instructions (hard)" on both my project and the library, I can now link successfully.  Life is good... for now :--)

2,949件の閲覧回数
mike1974
Contributor III

Hi Erich, here is the complete linker command line, as well as the output.  I clipped the output a bit, because it was very long, but it just repeats over and over "undefined reference"...

'Invoking: Cross ARM C++ Linker'

arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -T "C:/M2/Project_Settings/Linker_Files/ProcessorExpert.ld" -Xlinker --gc-sections -L"C:/M2/Project_Settings/Linker_Files" -L"C:\kds_workspace\Segger-GUI\Debug" -Wl,-Map,"M2.map" -nanolibc -o "M2.elf" @ObjectList

./Sources/Application/Menu/Screen_Callbacks.o:(.data._ZL7_apFont+0x0): undefined reference to `GUI_Font16B_1'

./Sources/Application/Menu/Screen_Callbacks.o:(.data._ZL7_apFont+0x4): undefined reference to `GUI_Font20B_1'

./Sources/Application/Menu/Screen_Callbacks.o:(.data._ZL7_apFont+0x8): undefined reference to `GUI_Font8x16x2x2'

./Sources/Application/Menu/Screen_Callbacks.o:(.data._ZL7_apFont+0xc): undefined reference to `GUI_Font8x10_ASCII'

./Sources/Application/Menu/Screen_Callbacks.o:(.data._ZL7_apFont+0x10): undefined reference to `GUI_FontD24x32'

./Sources/Application/Menu/Screen_Callbacks.o:(.data._ZL7_apFont+0x14): undefined reference to `GUI_Font20B_1'

./Sources/Application/Menu/Screen_Callbacks.o: In function `showTextField(long, int, unsigned long, unsigned long)':

C:\M2\Debug/../Sources/Application/Menu/Screen_Callbacks.cpp:143: undefined reference to `WM_GetDialogItem'

C:\M2\Debug/../Sources/Application/Menu/Screen_Callbacks.cpp:144: undefined reference to `TEXT_SetBkColor'

C:\M2\Debug/../Sources/Application/Menu/Screen_Callbacks.cpp:145: undefined reference to `TEXT_SetTextColor'

./Sources/Application/Menu/Screen_Callbacks.o: In function `cbBkWindowCallback(WM_MESSAGE*)':

C:\M2\Debug/../Sources/Application/Menu/Screen_Callbacks.cpp:267: undefined reference to `GUI_SetBkColor'

C:\M2\Debug/../Sources/Application/Menu/Screen_Callbacks.cpp:268: undefined reference to `GUI_Clear'

0 件の賞賛
返信
2,950件の閲覧回数
mike1974
Contributor III

Hmm I just noticed I'm using "ObjectList" ( a text file) as the input of .o files to use.  I did this to get around the Windows command line limit (8192 chars).  I just saw this morning on mcuoneclipse.com that there is a fix for that.  I wonder if this could be causing it?

0 件の賞賛
返信
An error has occurred when reading existing sub-variable "Language_PG_Configuration"; see cause exception! The type of the containing value was: extended_hash+string (lithium.coreapi.webui.template.models.NamedValueByNameTemplateModel wrapped into f.e.b.StringModel) ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign redirect_lingo_page_url = web... [in template "language_macro_header.ftl" at line 173, column 1] - Reached through: #include "language_macro_header.ftl" [in template "Language_translator_Dashboard" at line 3, column 1] ----