簡體   English   中英

OpenCv Makefile架構x86_64錯誤的未定義符號

[英]OpenCv Makefile Undefined symbols for architecture x86_64 error

我希望在運行Makefile時得到此錯誤的幫助。 在將代碼分成不同的文件之前,我可以很好地編譯這些代碼。

我有main.c文件,其中是main函數,其中包括“ color.h”。 其他文件是color.h和color.c。 Color.c也包含color.h。 這是我的第一個Makefile,我已經閱讀了很多有關該主題的主題和文章,所以如果我寫錯了,請糾正我。

這是Makefile

CC = g++

CPPFLAGS = `pkg-config opencv --cflags`
LDFLAGS = `pkg-config opencv --libs`

ARCH = -arch x86_64

DEPENDENCIES = main.o color.o

# FINAL OUTPUTS
main: $(DEPENDENCIES)
    $(CC) $(ARCH) $(LDFLAGS) -o $(DEPENDENCIES) 

# MODULES
main.o: main.c color.h
    $(CC) $(ARCH) $(CPPFLAGS) -c main.c

colorOps.o: color.c
    $(CC) $(ARCH) $(CPPFLAGS) -c colorOps.c


# CLEAN
clean:
    -rm main $(DEPENDENCIES)

這是我得到的錯誤

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [main] Error 1

我正在運行通過Mac OS X 10.8.4上的Macports安裝的OpenCv,並且正如我所說,在我分離文件之前,一切工作正常。

非常感謝你!

您幾乎正確:

您只需要將輸出文件名(程序名稱)添加到鏈接步驟:

main: $(DEPENDENCIES)
    $(CC) $(ARCH) $(LDFLAGS) -o $@ $(DEPENDENCIES) 
#                            ^^^^^

呵呵,你忘了那個。 如果您查看了命令行輸出,則會看到它輸出了:

 gcc -arch x86_64 /opencv-ld-flags/ -o main.o color.o

因此,所有它做的是試圖輸出到main.o內容color.o哪里,你打算是什么:

 gcc -arch x86_64 /opencv-ld-flags/ -o main main.o color.o

$ @將評估生成規則語句中冒號(:)左側的目標文件(在本例中為main)。

清理文件

CC = g++

# CPPFLAGS are different from CFLAGS 
# keep CPPFLAGS name only for pre-processing flags 

CFLAGS = `pkg-config opencv --cflags`
LDFLAGS = `pkg-config opencv --libs`

ARCH = -arch x86_64

# DEPENDENCIES is a slightly confusing name
# You will see how I generate dependencies below
# So I replaced DEPENDENCIES with OBJ

SRC=main.c color.c
OBJ=$(SRC:.c=.o)

# INCLUDES flags should be of the form -Idir/path etc.
# Reason for separating this out is to help with 
# generating dependencies below

CPPFLAGS=
INCLUDES=

TARGET=main

default: $(TARGET)

$(TARGET): $(OBJ)
         $(CC) $(LDFLAGS) -o $@ $(OBJ) 

%.o: %.c
    $(CC)  $(CPPFLAGS) $(CFLAGS) $(INCLUDES) -c $< -o $@ 

# CLEAN
clean:
    -rm main $(OBJ)


# Create a rule to generate dependencies information for the makefile

.deps: $(SRC)
     $(CC) -o .deps $(CPPFLAGS) $(INCLUDES) -M -E $(SRC) 

#include dependencies
include .deps

暫無
暫無

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

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