2016-12-07 12 views
1

libusb를 사용하는 공급 업체의 샘플 코드를 받았습니다. 다른 게시물의libusb 함수에 대한 정의되지 않은 참조

mkdir -p .obj 
gcc -I./ -I../libsoccptp/include -std=gnu++11 -pthread -g -o .obj/authentication.o -c authentication.cpp -lusb-1.0 -lusb 
gcc -std=gnu++11 -pthread -g -o ../out/bin/authentication .obj/authentication.o -L../out/lib -lsoccptp -L/usr/lib -lusb-1.0 -lstdc++ -lusb-1.0 -lusb 
../out/lib/libsoccptp.so: undefined reference to `libusb_has_capability' 
../out/lib/libsoccptp.so: undefined reference to `libusb_hotplug_register_callback' 
../out/lib/libsoccptp.so: undefined reference to `libusb_handle_events_timeout_completed' 
../out/lib/libsoccptp.so: undefined reference to `libusb_hotplug_deregister_callback' 
collect2: error: ld returned 1 exit status 
Makefile:28: recipe for target '../out/bin/authentication' failed 
make: *** [../out/bin/authentication] Error 1 

내가 찾은 많은 사람들이 비슷한 문제가 제대로 연결 libusb를 점점로 : 나는 메이크업을 사용하여 컴파일 할 때 나는이 얻을. 하지만 다른 사람들을위한 해결책은 컴파일러에 인수로 -lusb-1.0-lusb을 추가하는 것입니다. 분명한 것은, 내 공급 업체가 이미 Makefile을 설정하여이를 수행 한 것입니다. 필자는 우분투에 libusb-1.0의 최신 버전이 있다는 것을 확인했습니다. 우분투는 제 배포자가 사용하는 것과 동일한 환경입니다.

왜 제대로 연결되지 않습니까?

ROOT_DIR ?= .. 
OUT ?= ../out 
OUT_DIR := $(OUT)/bin 
CC := gcc 

LIBS := -L${OUT}/lib -lsoccptp -L/usr/lib -lusb-1.0 -lstdc++ 

override INCLUDES += -I./ -I${ROOT_DIR}/libsoccptp/include 

.PHONY: clean 

OBJ_DIR := .obj 
SOURCES := authentication.cpp shoot_an_image_and_get_it.cpp check_LiveView_status_and_get_images.cpp parser_handling.cpp list_objects.cpp change_camera_setting.cpp 
OBJECTS := $(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.cpp=.o))) 
TARGETS := $(addprefix ${OUT_DIR}/, $(notdir $(basename ${SOURCES}))) 

all: ${OUT_DIR} $(OBJ_DIR) ${TARGETS} 

objs: $(OBJ_DIR) $(OBJECTS) 

$(OBJ_DIR)/%.o : %.cpp 
    $(CC) $(INCLUDES) -std=gnu++11 -pthread -g -o [email protected] -c $< -lusb-1.0 -lusb 

$(OUT_DIR)/%: $(OBJ_DIR)/%.o 
    ${CC} -std=gnu++11 -pthread -g -o [email protected] $< ${LIBS} -lusb-1.0 -lusb 

${OUT_DIR}: 
    mkdir -p ${OUT_DIR} 

$(OBJ_DIR): 
    mkdir -p $(OBJ_DIR) 

clean: 
    rm -rf ${TARGETS} $(OBJ_DIR) 

답변

1

소프트웨어를 제공하는 공급 업체 엔지니어와 토론 후에는 그때 그들이 개발 한 우분투 (V16)의 최신 버전을 사용하는 것을 결정 하였다 : 참고로

, 여기에 메이크입니다 소프트웨어가 켜져 있습니다. 이전 버전 (v14)에서 컴파일했을 때 컴파일이 잘되었습니다.

엔지니어는 우분투 16에서 변경된 코드를 설명 할 수 없었지만 지금은 문제가 해결되었습니다.