मैं एक सीएमके प्रोजेक्ट बनाने की कोशिश कर रहा हूं जो सी ++ से सी कोड को कॉल करता है, और मुझे अपरिभाषित प्रतीक मिल रहे हैं, भले ही मैं (AFAIK) "बाहरी सी" का ठीक से उपयोग कर रहा हूं।

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(CTest LANGUAGES CXX)
add_executable(test main.cpp lib.c)

मुख्य.सीपीपी:

#include "lib.h"

int main()
{
    printit();
    return 0;
}

Lib.c:

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

int printit()
{
    printf("Hello world\n");
    return 0;
}

Lib.h:

extern "C" int printit();

यह मुझे "प्रिंटिट के लिए अपरिभाषित संदर्भ" त्रुटि देता है।

अगर मैं इसे कमांड लाइन से बनाता हूं, तो यह ठीक काम करता है:

g++ main.cpp lib.c

मैं क्या गलत कर रहा हूं?

0
user240515 20 जिंदा 2019, 22:11

1 उत्तर

सबसे बढ़िया उत्तर

extern "C" C++ सिंटैक्स है। इसलिए आपका हेडर lib.h सी से उपयोग नहीं किया जा सकता है। यदि आप इसे निम्नानुसार बदलते हैं तो इसे सी ++ और सी से भी इस्तेमाल किया जा सकता है।

#ifndef LIB_H_HEADER
#define LIB_H_HEADER

#ifdef __cplusplus
extern "C" 
{
#endif

int printit();

#ifdef __cplusplus
}
#endif

#endif /* LIB_H_HEADER */

चूंकि आपके पास C और CXX दोनों स्रोत हैं, इसलिए आपके प्रोजेक्ट कॉल को C को भी project(CTest LANGUAGES C CXX) को आपके CMakeLists.txt में सक्षम करना चाहिए।

2
vre 20 जिंदा 2019, 22:27