gcc makefile을 g++로 만들면 링킹 에러가 납니다.

wrldvsn의 이미지

안녕하세요.
현재 링킹 에러가 나고 있는데 내공이 부족하여 제 눈에는
문제가 잘 안보입니다.

오리지날 코드는 C로 만들었고 gcc를 이용하면 컴파일+링킹이 문제 없이 다 잘됩니다.
그런데 붙여야 할 저의 코드가 C++로 만들었기 때문에 오리지날 C 코드를 g++로 컴파일 하여고 합니다. 지금 하려는것이 이 부분인데 이 부분에서 진도가 안나가네요. :(

make 파일에서 제가 건드린 것은
main.c를 main.cpp로 만든것과
gcc를 g++로 바꾼것 외에는 문제 없이 잘 됩니다.

Makefile 같이 올립니다.
혹시 뭐가 문제인지 한번 봐주시면 감사하겠습니다.
검색을 여러번 했는데 마땅한 답이 안나오더군요. 감사합니다.

EXE = pfss-node-cpp
BINDIR = ./bin/
INC = ./include/
SRC = ./src/
BUILD = ./Build/
LIBS = -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib -lstdc++ -ldl -lm -lpthread -lcurses -lcv -lcvaux -lcxcore -lhighgui -lpthread -lmvos -lslx -lXext -lXt -lmvdga -lXxf86dga -lcimar -ljausC -lnodeManager -lsmartSensor
# mvgrabber : -lmvos -lslx -lXext -lXt -lmvdga -lXxf86dga
# opencv : -lcv -lcvaux -lcxcore -lhighgui
# cimar : -lcimar -ljausC -lnodeManager -lsmartSensor
CC = g++
LINK = g++
CCFLAGS = -pipe -W -c -g -I$(INC) -I/usr/lib/qt-3.3/include/ -I/usr/include/cimar
LFLAGS = -I$(INC) -I/usr/include/ -I/usr/include/cimar -I/usr/include/cimar.h -I/usr/include/cimar/jaus -I/usr/include/cimar/smartSensor -L/usr/lib

OBJECTS = \
$(BUILD)pfss.o \
$(BUILD)main.o \
$(BUILD)pfnode.o

default: $(BINDIR)$(EXE)

all: $(OBJECTS) $(BINDIR)$(EXE)

$(BINDIR)$(EXE): $(OBJECTS)
$(CC) $(LFLAGS) -o $(BINDIR)$(EXE) $(OBJECTS) $(LIBS)

$(BUILD)main.o : $(SRC)main.cpp
$(CC) $(CCFLAGS) -o $(BUILD)main.o $(SRC)main.cpp

$(BUILD)pfss.o : $(SRC)pfss.c
$(CC) $(CCFLAGS) -o $(BUILD)pfss.o $(SRC)pfss.c

$(BUILD)pfnode.o : $(SRC)pfnode.c
$(CC) $(CCFLAGS) -o $(BUILD)pfnode.o $(SRC)pfnode.c

clean:
rm -f $(BUILD)*.o
rm -f $(BINDIR)$(EXE)

--------------------------------------------------
참고로 에러 메시지를 붙여봅니다.

[root@Holly 0725-node]# make clean all
rm -f ./Build/*.o
rm -f ./bin/pfss-node-cpp
g++ -pipe -W -c -g -I./include/ -I/usr/lib/qt-3.3/include/ -I/usr/include/cimar -o ./Build/pfss.o ./src/pfss.c
g++ -pipe -W -c -g -I./include/ -I/usr/lib/qt-3.3/include/ -I/usr/include/cimar -o ./Build/main.o ./src/main.cpp
g++ -pipe -W -c -g -I./include/ -I/usr/lib/qt-3.3/include/ -I/usr/include/cimar -o ./Build/pfnode.o ./src/pfnode.c
g++ -I./include/ -I/usr/include/ -I/usr/include/cimar -I/usr/include/cimar.h -I/usr/include/cimar/jaus -I/usr/include/cimar/smartSensor -L/usr/lib -o ./bin/pfss-node-cpp ./Build/pfss.o ./Build/main.o ./Build/pfnode.o -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib -lstdc++ -ldl -lm -lpthread -lcurses -lcv -lcvaux -lcxcore -lhighgui -lpthread -lmvos -lslx -lXext -lXt -lmvdga -lXxf86dga -lcimar -ljausC -lnodeManager -lsmartSensor
./Build/pfss.o(.text+0x34): In function `pfssStartup()':
src/pfss.c:122: undefined reference to `propertiesCreate()'
./Build/pfss.o(.text+0x4a):src/pfss.c:123: undefined reference to `propertiesLoad(propertyStruct*, _IO_FILE*)'
./Build/pfss.o(.text+0x6f):src/pfss.c:128: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x83):src/pfss.c:133: undefined reference to `jausNodeCreate()'
./Build/pfss.o(.text+0x8d):src/pfss.c:134: undefined reference to `jausSubsystemCreate()'
./Build/pfss.o(.text+0xbc):src/pfss.c:138: undefined reference to `nodeManagerOpen(JausComponentStruct*)'
./Build/pfss.o(.text+0xda):src/pfss.c:141: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x148):src/pfss.c:153: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x186):src/pfss.c:162: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x1c2): In function `pfssShutdown()':
src/pfss.c:182: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x1e9):src/pfss.c:186: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x221):src/pfss.c:190: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x232):src/pfss.c:195: undefined reference to `nodeManagerClose(NodeManagerInterfaceStruct*)'
./Build/pfss.o(.text+0x248):src/pfss.c:197: undefined reference to `jausSubsystemDestroy(JausSubsystemStruct*)'
./Build/pfss.o(.text+0x25b):src/pfss.c:198: undefined reference to `jausNodeDestroy(JausNodeStruct*)'
./Build/pfss.o(.text+0x278):src/pfss.c:202: undefined reference to `propertiesDestroy(propertyStruct*)'
./Build/pfss.o(.text+0x2e7): In function `pfssGetGridMapScStatus()':
src/pfss.c:238: undefined reference to `scManagerQueryActiveMessage(NodeManagerInterfaceStruct*, unsigned short)'
./Build/pfss.o(.text+0x309): In function `pfssGetGposScStatus()':
src/pfss.c:243: undefined reference to `cDebug(int, char*, ...)'
./Build/pfss.o(.text+0x35f): In function `pfssThread(void*)':
src/pfss.c:274: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x393):src/pfss.c:283: undefined reference to `nodeManagerReceive(NodeManagerInterfaceStruct*, JausMessageStruct**)'
./Build/pfss.o(.text+0x3a8):src/pfss.c:285: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x3b8):src/pfss.c:285: undefined reference to `cDebug(int, char*, ...)'
./Build/pfss.o(.text+0x3d0):src/pfss.c:290: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x3f4):src/pfss.c:299: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x411):src/pfss.c:302: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x49e):src/pfss.c:338: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0x517): In function `pfssProcessMessage(JausMessageStruct*)':
src/pfss.c:368: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x525):src/pfss.c:369: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x5a7):src/pfss.c:377: undefined reference to `confirmComponentControlMessageFromJausMessage(JausMessageStruct*)'
./Build/pfss.o(.text+0x5be):src/pfss.c:381: undefined reference to `confirmComponentControlMessageDestroy(ConfirmComponentControlMessageStruct*)'
./Build/pfss.o(.text+0x5d1):src/pfss.c:385: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x5df):src/pfss.c:385: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x5ed):src/pfss.c:387: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x600):src/pfss.c:391: undefined reference to `rejectComponentControlMessageFromJausMessage(JausMessageStruct*)'
./Build/pfss.o(.text+0x617):src/pfss.c:395: undefined reference to `rejectComponentControlMessageDestroy(RejectComponentControlMessageStruct*)'
./Build/pfss.o(.text+0x62a):src/pfss.c:399: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x638):src/pfss.c:399: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x646):src/pfss.c:401: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x659):src/pfss.c:405: undefined reference to `reportComponentAuthorityMessageFromJausMessage(JausMessageStruct*)'
./Build/pfss.o(.text+0x670):src/pfss.c:409: undefined reference to `reportComponentAuthorityMessageDestroy(ReportComponentAuthorityMessageStruct*)'
./Build/pfss.o(.text+0x683):src/pfss.c:413: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x691):src/pfss.c:413: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x69f):src/pfss.c:415: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x6b2):src/pfss.c:419: undefined reference to `reportComponentStatusMessageFromJausMessage(JausMessageStruct*)'
./Build/pfss.o(.text+0x6c9):src/pfss.c:423: undefined reference to `reportComponentStatusMessageDestroy(ReportComponentStatusMessageStruct*)'
./Build/pfss.o(.text+0x6dc):src/pfss.c:427: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x6ea):src/pfss.c:427: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x6f8):src/pfss.c:429: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x717):src/pfss.c:433: undefined reference to `reportGlobalPoseMessageDestroy(ReportGlobalPoseMessageStruct*)'
./Build/pfss.o(.text+0x725):src/pfss.c:435: undefined reference to `reportGlobalPoseMessageFromJausMessage(JausMessageStruct*)'
./Build/pfss.o(.text+0x746):src/pfss.c:442: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x754):src/pfss.c:442: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x762):src/pfss.c:444: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x781):src/pfss.c:448: undefined reference to `reportVelocityStateMessageDestroy(ReportVelocityStateMessageStruct*)'
./Build/pfss.o(.text+0x78f):src/pfss.c:450: undefined reference to `reportVelocityStateMessageFromJausMessage(JausMessageStruct*)'
./Build/pfss.o(.text+0x7b0):src/pfss.c:457: undefined reference to `jausMessageCommandCodeString(JausMessageStruct*)'
./Build/pfss.o(.text+0x7be):src/pfss.c:457: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x7cc):src/pfss.c:459: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0x7e8):src/pfss.c:463: undefined reference to `defaultJausMessageProcessor(JausMessageStruct*, NodeManagerInterfaceStruct*, JausComponentStruct*)'
./Build/pfss.o(.text+0x7fa): In function `pfssStartupState()':
src/pfss.c:471: undefined reference to `reportSensorRingBufferMessageCreate()'
./Build/pfss.o(.text+0x841):src/pfss.c:476: undefined reference to `rb_init(long, long)'
./Build/pfss.o(.text+0x85f):src/pfss.c:479: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x880):src/pfss.c:486: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x899):src/pfss.c:492: undefined reference to `serviceConnectionCreate()'
./Build/pfss.o(.text+0x916):src/pfss.c:505: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0x92f):src/pfss.c:511: undefined reference to `serviceConnectionCreate()'
./Build/pfss.o(.text+0x9ac):src/pfss.c:524: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0xa22): In function `pfssInitState()':
src/pfss.c:545: undefined reference to `pointLlaCreate()'
./Build/pfss.o(.text+0xa38):src/pfss.c:548: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0xa76):src/pfss.c:558: undefined reference to `utmConversionInit(PointLlaStruct*)'
./Build/pfss.o(.text+0xa84):src/pfss.c:559: undefined reference to `pointLlaDestroy(PointLlaStruct*)'
./Build/pfss.o(.text+0xaa6):src/pfss.c:569: undefined reference to `scManagerAddSupportedMessage(NodeManagerInterfaceStruct*, unsigned short)'
./Build/pfss.o(.text+0xab3):src/pfss.c:572: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0xae5):src/pfss.c:576: undefined reference to `scManagerCreateServiceConnection(NodeManagerInterfaceStruct*, ServiceConnectionStruct*)'
./Build/pfss.o(.text+0xafb):src/pfss.c:578: undefined reference to `cDebug(int, char*, ...)'
./Build/pfss.o(.text+0xb1d):src/pfss.c:584: undefined reference to `scManagerCreateServiceConnection(NodeManagerInterfaceStruct*, ServiceConnectionStruct*)'
./Build/pfss.o(.text+0xb33):src/pfss.c:586: undefined reference to `cDebug(int, char*, ...)'
./Build/pfss.o(.text+0xb3b):src/pfss.c:591: undefined reference to `getTimeSeconds()'
./Build/pfss.o(.text+0xb82): In function `pfssShutdownState()':
src/pfss.c:685: undefined reference to `rejectComponentControlMessageCreate()'
./Build/pfss.o(.text+0xbb4):src/pfss.c:689: undefined reference to `rejectComponentControlMessageToJausMessage(RejectComponentControlMessageStruct*)'
./Build/pfss.o(.text+0xbcb):src/pfss.c:690: undefined reference to `nodeManagerSend(NodeManagerInterfaceStruct*, JausMessageStruct*)'
./Build/pfss.o(.text+0xbd9):src/pfss.c:691: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0xbe7):src/pfss.c:693: undefined reference to `rejectComponentControlMessageDestroy(RejectComponentControlMessageStruct*)'
./Build/pfss.o(.text+0xc12):src/pfss.c:701: undefined reference to `scManagerTerminateServiceConnection(NodeManagerInterfaceStruct*, ServiceConnectionStruct*)'
./Build/pfss.o(.text+0xc23):src/pfss.c:703: undefined reference to `serviceConnectionDestroy(ServiceConnectionStruct*)'
./Build/pfss.o(.text+0xc4e):src/pfss.c:712: undefined reference to `scManagerTerminateServiceConnection(NodeManagerInterfaceStruct*, ServiceConnectionStruct*)'
./Build/pfss.o(.text+0xc5f):src/pfss.c:714: undefined reference to `serviceConnectionDestroy(ServiceConnectionStruct*)'
./Build/pfss.o(.text+0xc75):src/pfss.c:718: undefined reference to `scManagerRemoveSupportedMessage(NodeManagerInterfaceStruct*, unsigned short)'
./Build/pfss.o(.text+0xc9c):src/pfss.c:725: undefined reference to `rb_free(_RINGBUFFER*)'
./Build/pfss.o(.text+0xcad):src/pfss.c:727: undefined reference to `reportSensorRingBufferMessageDestroy(ReportSensorRingBufferMessageStruct*)'
./Build/pfss.o(.text+0xcfb): In function `pfssAllState()':
src/pfss.c:742: undefined reference to `scManagerReceiveServiceConnection(NodeManagerInterfaceStruct*, ServiceConnectionStruct*, JausMessageStruct**)'
./Build/pfss.o(.text+0xd2a):src/pfss.c:751: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0xd4c):src/pfss.c:755: undefined reference to `scManagerRemoveSupportedMessage(NodeManagerInterfaceStruct*, unsigned short)'
./Build/pfss.o(.text+0xd7b):src/pfss.c:761: undefined reference to `scManagerReceiveServiceConnection(NodeManagerInterfaceStruct*, ServiceConnectionStruct*, JausMessageStruct**)'
./Build/pfss.o(.text+0xdaa):src/pfss.c:770: undefined reference to `cError(char*, ...)'
./Build/pfss.o(.text+0xdcc):src/pfss.c:774: undefined reference to `scManagerRemoveSupportedMessage(NodeManagerInterfaceStruct*, unsigned short)'
./Build/pfss.o(.text+0xe04): In function `sendGridMapMessage(NodeManagerInterfaceStruct*, ReportSensorRingBufferMessageStruct*)':
src/pfss.c:793: undefined reference to `scManagerGetSendList(NodeManagerInterfaceStruct*, unsigned short)'
./Build/pfss.o(.text+0xe47):src/pfss.c:801: undefined reference to `reportSensorRingBufferMessageToJausMessage(ReportSensorRingBufferMessageStruct*)'
./Build/pfss.o(.text+0xe5b):src/pfss.c:802: undefined reference to `nodeManagerSend(NodeManagerInterfaceStruct*, JausMessageStruct*)'
./Build/pfss.o(.text+0xe69):src/pfss.c:803: undefined reference to `jausMessageDestroy(JausMessageStruct*)'
./Build/pfss.o(.text+0xe85):src/pfss.c:806: undefined reference to `jausAddressToString(JausAddressStruct*, char*)'
./Build/pfss.o(.text+0xea1):src/pfss.c:811: undefined reference to `scManagerDestroySendList(ServiceConnectionStruct*)'
./Build/main.o(.text+0x8b): In function `updateScreen(int, int)':
src/main.cpp:50: undefined reference to `jausAddressToString(JausAddressStruct*, char*)'
./Build/main.o(.text+0xc2):src/main.cpp:52: undefined reference to `jausStateGetString(JausState)'
./Build/main.o(.text+0x44e): In function `main':
src/main.cpp:80: undefined reference to `getTimeSeconds()'
./Build/main.o(.text+0x5e1):src/main.cpp:115: undefined reference to `setLogVerbose(int)'
./Build/main.o(.text+0x60f):src/main.cpp:121: undefined reference to `setDebugLogic(int)'
./Build/main.o(.text+0x6bb):src/main.cpp:135: undefined reference to `setDebugLogic(int)'
./Build/main.o(.text+0x763):src/main.cpp:149: undefined reference to `setDebugLogic(int)'
./Build/main.o(.text+0x85d):src/main.cpp:170: undefined reference to `setDebugLevel(int)'
./Build/main.o(.text+0x8df):src/main.cpp:180: undefined reference to `setLogFile(_IO_FILE*)'
./Build/main.o(.text+0x9ea):src/main.cpp:208: undefined reference to `setLogFile(_IO_FILE*)'
./Build/main.o(.text+0xa1a):src/main.cpp:214: undefined reference to `cDebug(int, char*, ...)'
./Build/main.o(.text+0xa3f):src/main.cpp:217: undefined reference to `cError(char*, ...)'
./Build/main.o(.text+0xa5d):src/main.cpp:218: undefined reference to `cDebug(int, char*, ...)'
./Build/main.o(.text+0xb63):src/main.cpp:260: undefined reference to `getTimeSeconds()'
./Build/main.o(.text+0xb88):src/main.cpp:268: undefined reference to `getTimeSeconds()'
./Build/main.o(.text+0xc11):src/main.cpp:304: undefined reference to `cDebug(int, char*, ...)'
./Build/pfnode.o(.text+0x18): In function `pfStartup()':
src/pfnode.c:17: undefined reference to `cError(char*, ...)'
collect2: ld returned 1 exit status
make: *** [bin/pfss-node-cpp] Error 1

wrldvsn의 이미지

C 프로그램과 C++을 붙이는 것을 처음 하다보니까
이런 문제를 몰랐었습니다.
C 쪽에서 해결을 해주어야 했던 문제인데
C 라이브러리 코드에다가
extern "C"
{
# include "C라이브러리"
}

이것과 libstdc++을 추가해 주니까 되더군요. 이런 문제로 혹시 고생하시는 분이 계실까 하여 적어 보았습니다.

익명 사용자의 이미지


참고로 보다 정확한 원인은 name mangling때문입니다.

c++의 많은 기능중 하나인 overloading은 동일한 함수명으로 다른 파라메터를 넘기는것을 가능하게 하고 있습니다.

예를 들어,
int mytest(int para)
{
}

int mytest(const char * para)
{
}

와 같이 동일한 이름으로 다른 타입의 파라메터를 주고 호출할 수 있도록 하고 있습니다. mytest(1)하면 전자가 호출되고, mytest("xxx")하면 후자가 호출되겠지요. 이를 오버로딩이라고 하지요.

그럼 어떻게 이를 구별해서 호출할까? 사실, 구별해서 호출하는 것이 아니고,
이미 컴파일 타임에 C++컴파일러가 각 함수(위2개)에 대해 서로 다른 이름을 부여해 버립니다. 소위, 프로그래머가 부여한 이름으로 사용하지 않고,
컴파일러 수준에서 컴파일타임에 미리 내부적으로 새로 이름을 부여한다는 얘기지요.
이를 name mangling이라고 합니다.

다음 코드
$ more test1.cpp
#include <stdio.h>
int mytest(int i);

int mytest(int i )
{
return 0;
}
int main(void)
{
int a = 3;

mytest(a);
return 0;
}
$ cp test1.cpp test.c
$ g++ -c test1.cpp
$ gcc -c test.c
$ nm test1.o
0000000a T main
00000000 T _Z6mytesti
$ nm test.o
0000000a T main
00000000 T mytest

c++ 컴파일러가 mytest라는 함수를 _Z6mytesti라는 이름으로 mangling했음을 알 수 있습니다.

* 그래서,
c로 짠 프로그램을 C++과 합치려면?
1) 모두 C++컴파일러로 다시 재컴파일한다.
2) 또는 기존에 C로 컴파일된 함수를 extern "C"로 묶어준다.
위 2가지 방법이 사용될 수 있습니다.

* 또한, main함수는 반드시 c++로 작성해야 합니다.

jeweljar의 이미지

자답하신 내용이 맞습니다.
원래 g++을 비롯한 모든 C++ 컴파일러는
자기 자신의 독특한 규칙에 맞게 함수(또는 메소드)의 이름을 변형해서 컴파일합니다.
이를 name mangling이라고 하지요.

이 name mangling은 메소드의 overloading을 지원하기 위한 것으로
함수(또는 메소드)의 signature에 따른 적절한 suffix를 붙이게 됩니다.
foo() -> foo_xxxx()
뭐, 그런 식으로요.

그래서, C++ 컴파일러에서 C코드를 컴파일 할때
'이 코드는 C 코드니까 name mangling을 하지 말아라'라고 컴파일러에게
알려줘야 하는데, 그것이 extern "C" { ... } 코드입니다.

그래서, C와 C++을 혼합해서 개발하는 프로젝트의 xxx.h 헤더파일은
대개 다음과 같은 코드가 꼭 들어있기 마련이지요.

#ifdef __cplusplus__
extern "C" {
#endif

...

#ifdef __cplusplus__
}
#endif
jeweljar의 이미지

아, 한발 늦었군요 ^^ :oops:

wrldvsn의 이미지

문제는 해결했지만
이렇게 깊이 있는 설명을 해주실 지는 몰랐습니다.
감사드립니다. 그리고 많이 배웠습니다.

하시는 일들 잘되시길 바라겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.