मैं लाइब्रेरी को जोड़ने के लिए सीएमके का उपयोग करने का प्रयास कर रहा हूं (BNO055 Driver)। चूंकि बीएनओ055 चालक सीएमके का उपयोग नहीं करता है और इसे लगभग एक साल तक नहीं बदला गया है, मैंने केवल स्रोत फाइलों को डाउनलोड करने और उन्हें अपनी परियोजना में रखने का फैसला किया है।सीएमके "फ़ंक्शन के लिए अनिर्धारित संदर्भ"
मैं फिर पुस्तकालय बनाने और इसे जोड़ने के लिए सीएमके का उपयोग करता हूं।
मुद्दा यह है कि लिंक काम नहीं कर रहा है। जब मैं प्रोजेक्ट संकलित करता हूं तो मुझे undefined reference to <function>
त्रुटि मिलती है, जहां <function>
BNO055 ड्राइवर द्वारा परिभाषित एक फ़ंक्शन है।
क्या मैं पुस्तकालय को गलत तरीके से बना रहा हूं या जोड़ रहा हूं?
क्या मुझे इन कार्यों को परिभाषित करने के लिए कुछ और करने की ज़रूरत है?
कोड के 200 लाइनों में चिपकाने नहीं के लिए, यहाँ एक सरल main.cpp
कि असली main.cpp
रूप में एक ही त्रुटि पैदा करता है। आप असली main.cpp
Github रेपो के लिए लिंक bellow का पालन
#include "bno055.h"
#include "mraa.hpp"
struct bno055_t bno055;
mraa::I2c *i2c(0);
int main() {
bno055_init(&bno055);
i2c->address(0x29);
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.4)
project(imc-server)
# CMake
# -- Config
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
# Global
# -- Include
include(ExternalProject)
# BNO055
# -- Include
include_directories(${CMAKE_SOURCE_DIR}/bno055)
set(SOURCE_FILES ${SOURCE_FILES}
${CMAKE_SOURCE_DIR}/bno055/bno055.h
${CMAKE_SOURCE_DIR}/bno055/bno055.c)
# MRAA
# -- Build
externalProject_add(mraa
GIT_REPOSITORY https://github.com/intel-iot-devkit/mraa.git
GIT_TAG v0.7.5
)
# Compile
# -- Source
set(SOURCE_FILES ${SOURCE_FILES}
main.cpp)
# -- Create
add_executable(imc-server ${SOURCE_FILES})
add_dependencies(imc-server mraa)
के प्रासंगिक भाग को देखने के लिए चाहते हैं, तो लॉग
[ 90%] Linking CXX executable imc-server
CMakeFiles/imc-server.dir/test.cpp.o: In function `main':
/home/noah/Documents/Inertial-Motion-Capture/imc-server/test.cpp:8: undefined reference to `bno055_init(bno055_t*)'
CMakeFiles/imc-server.dir/test.cpp.o: In function `mraa::I2c::address(unsigned char)':
/usr/local/include/mraa/i2c.hpp:99: undefined reference to `mraa_i2c_address'
collect2: error: ld returned 1 exit status
make[2]: *** [imc-server] Error 1
make[1]: *** [CMakeFiles/imc-server.dir/all] Error 2
make: *** [all] Error 2
बिल्ड Project Github (39a6196
)
Build Log
आप '$ {का उपयोग करें:
मुझे लगता है कि इतनी तरह एक
extern "C" {}
ब्लॉक में एक समारोह एक सी कार्यक्रम में परिभाषित किया गया उपयोग करने के लिए, एक C++ प्रोग्राम, आप है रैप करने के लिए सी पुस्तकालय के शामिल सीखा 'Bno055' लाइब्रेरी बनाने के लिए CMAKE_SOURCE_DIR}/bno055/bno055.c' फ़ाइल, इसलिए आपको उस फ़ाइल का उपयोग 'imc-server' निष्पादन योग्य बनाने के लिए नहीं करना चाहिए। साथ ही, निष्पादन योग्य लिंक के लिए लाइब्रेरी लक्ष्य नाम का उपयोग करना बेहतर है: 'target_link_libraries (imc-server bno055)'। बाहरी परियोजना 'मरा' के लिए, आपको अतिरिक्त लक्ष्य निर्भरता की आवश्यकता है ताकि इसके साथ सही तरीके से लिंक किया जा सके: 'add_dependencies (imc-server mraa)'। – Tsyvarev@Tsyvarev ठीक है, मैंने बस निष्पादन योग्य में BNO055 फ़ाइलों को जोड़ा (इसलिए कोई lib या bno055 के लिए लिंक नहीं)। हालांकि मुझे अभी भी अपरिभाषित फ़ंक्शन त्रुटियां मिल रही हैं। मैंने सभी मरा कोड को भी असम्बद्ध किया और मुझे उन कार्यों के लिए अपरिभाषित फ़ंक्शन त्रुटियां भी मिल रही हैं। क्या मैं कुछ मौलिक रूप से यहां लापता हूं? [परिवर्तन के साथ प्रतिबद्ध => 39a6196] (https://github.com/Noah-Huppert/Inertial-Motion-Capture/tree/39a6196e48623c76323b92d37bf6e811c22f3ad5/imc-server) –
त्रुटि मिलने पर कौन सा स्रोत संकलित किया जा रहा है? सटीक त्रुटि संदेश (कम से कम, एक फ़ंक्शन के लिए) सहायक होगा। – Tsyvarev