使用 g++ 链接我的程序
Linking my program using g++
我在使用 g++ 构建程序时遇到了一些问题。该程序使用的是我用 C 语言编写的名为 libiec60063 的库。我想用 C++ 编写我的新项目(即使我还不熟悉 C++),但我无法 link 正确地做到这一点。
例如,我在名为 main.cpp
的文件中有以下代码
#include <libiec60063.h>
int main() {
Select_IEC60063_Number(125, 12);
return 0;
}
我可以正确地编译源代码
g++ -I/home/workspace/a_CommonBinary/include -c main.cpp
如果我想link它我收到一些错误消息
g++ -L/home/workspace/a_CommonBinary_draft/lib -o main main.o -lm -liec60063
main.o: In function `main':
main.cpp:(.text+0x1b): undefined reference to `Select_IEC60063_Number(double, int)'
collect2: error: ld returned 1 exit status
如果我将主文件重命名为 main.c,我可以使用相同的参数使用 GCC 编译器正确地编译和 link 程序。
谁能解释一下 gcc 和 g++ 之间的区别?
你可能忘了放
#ifdef __cplusplus
extern "C" {
#endif
靠近 libiec60063.h
头文件的开头,并且
#ifdef __cplusplus
}; // end extern "C"
#endif
接近头文件末尾,或者如果您不想更改头文件:
extern "C" {
#include <libiec60063.h>
};
在您的 C++ 代码中。
参见 this question. You need to disable name mangling. Read about compatibility of C & C++。
顺便说一句,你应该用 g++ -Wall -Wextra -g
编译,也许用 -std=c++11
和 C++11
的代码
我在使用 g++ 构建程序时遇到了一些问题。该程序使用的是我用 C 语言编写的名为 libiec60063 的库。我想用 C++ 编写我的新项目(即使我还不熟悉 C++),但我无法 link 正确地做到这一点。
例如,我在名为 main.cpp
的文件中有以下代码#include <libiec60063.h>
int main() {
Select_IEC60063_Number(125, 12);
return 0;
}
我可以正确地编译源代码
g++ -I/home/workspace/a_CommonBinary/include -c main.cpp
如果我想link它我收到一些错误消息
g++ -L/home/workspace/a_CommonBinary_draft/lib -o main main.o -lm -liec60063
main.o: In function `main':
main.cpp:(.text+0x1b): undefined reference to `Select_IEC60063_Number(double, int)'
collect2: error: ld returned 1 exit status
如果我将主文件重命名为 main.c,我可以使用相同的参数使用 GCC 编译器正确地编译和 link 程序。
谁能解释一下 gcc 和 g++ 之间的区别?
你可能忘了放
#ifdef __cplusplus
extern "C" {
#endif
靠近 libiec60063.h
头文件的开头,并且
#ifdef __cplusplus
}; // end extern "C"
#endif
接近头文件末尾,或者如果您不想更改头文件:
extern "C" {
#include <libiec60063.h>
};
在您的 C++ 代码中。
参见 this question. You need to disable name mangling. Read about compatibility of C & C++。
顺便说一句,你应该用 g++ -Wall -Wextra -g
编译,也许用 -std=c++11
和 C++11