簡體   English   中英

gcc 4.2.1鏈接問題:體系結構x86_64的未定義符號

[英]gcc 4.2.1 Linking issue: Undefined Symbols for Architecture x86_64

是的,之前有人問過,但是我在SO和其他地方提出的每個答案都與用gcc而不是g ++編譯C ++代碼有關,或者與標准庫有某種問題。 到目前為止,在這里沒有任何實際的排隊權利。

所以,我正在經歷C語言的基礎速成課程,並嘗試編譯一個示例,用於說明鏈接到您創建的文件,而不是標准庫。 這是代碼:

包括math_functions.h

int   sum       (int x, int y);
float average   (float x, float y, float z);

math_functions.c

int sum (int x, int y)
{
  return (x + y);
}

float average (float x, float y, float z)
{
  return (x + y + z) / 3;
}

最后

test3.c

#include <stdio.h>
#include "math_functions.h"

main ()
{
  int   theSum     = sum (8, 12);
  float theAverage = average (16.9, 7.86, 3.4);

  printf ("the sum is: %i ", theSum);
  printf ("and the average is: %f \n", theAverage);
  printf ("average casted to an int is: %i \n", (int)theAverage);
}

這些都在同一個文件夾中。 當我打開終端時,cd到文件夾並運行:

gcc test3.c -o test3

我明白了:

Undefined symbols for architecture x86_64:
  "_average", referenced from:
    _main in ccmf69Tt.o
  "_sum", referenced from:
    _main in ccxms0fF.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

如果我使用gcc或g ++(我不應該這樣做,因為這應該都是C)會發生這種情況,而我之前編譯的所有內容現在都可以正常使用

#include <stdio.h>

在頂部。

我可以通過刪除它來編譯並運行正常

#include "math_functions.h"

test3.c文件,把包括math_functions.h的內容之前main()和math_functions.c后的主要內容()。 是的,這是復制和粘貼,所以它絕對是相同的代碼。

所以,是的,我可以讓我的代碼工作,但它失敗了練習的目的,因為我不會在任何其他C文件中使用該代碼而不復制它並將其粘貼到一個文件中。 ..

所以我想知道,有沒有辦法解決這個問題,所以我可以包含更多只有標准的C,C ++和Objective-C庫?

這通過終端盒,手動輸入gcc命令,以及通過CodeRunner來實現,CodeRunner將標准命令全部隱藏在一個按鈕中,所以我無法填充它。

我使用Xcode 4.6.2中的命令行工具在2012 Mac Mini上運行Mountain Lion 10.8.4(12E55)(幾小時前安裝它們,我實際上並沒有做太多標准使用Mini直到現在)

我在MacBook Air上安裝了所有相同的軟件,但尚未對其進行測試,以確定是否存在相同的問題。

有什么指針嗎? 如果其他人已經有了這個並在SO的某處工作了,請指點我,我一直在尋找一個小時,但就像我之前所說的那樣,到目前為止我找到的所有解決方案最終都是在那里是C ++代碼或標准庫奇怪的東西。

你只需要編譯maths_function。 鏈接器抱怨它沒有該模塊中包含的定義。

gcc test3.c math_functions.c -o test3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM