0
stdC++ライブラリでcプログラムにコンパイルできないという問題があります。私はUbuntu 14.04、gcc 4.9です。'c'プログラムでgcc/g ++を使用してstdC++でコンパイルする際の問題
私の質問です:stdC++でcプログラムにコンパイルすることは可能ですか?これはarmhf-linuxのクロスコンパイラ/ライブラリを使ってもできますか?私はコンパイルするには、次のコマンドラインを使用してい
:
g++ -c cppfile.cpp
gcc -o cfile -lstdc++ cppfile.o cfile.c
私はまた、代わりのgcC++グラムを使用してみましたが、私は同じエラーを取得します。
私の主なファイルは次のとおりです。
// cfile.c
#include <string.h>
#include <stdio.h>
#include "cppfile.h"
int main()
{
printf("Hello");
myFunction();
return 0;
}
私のC++ファイルはこちらです:
// cppfile.cpp
#include <string>
using namespace std;
extern "C" {
int myFunction()
{
std::string s = "hi";
return 1;
}
}
ヘッダファイル:
は// cppfile.h
int myFunction();
コンパイル出力は次のとおりです。
cppfile.o: In function `myFunction':
cppfile.cpp:(.text+0xf): undefined reference to `std::allocator<char>::allocator()'
cppfile.cpp:(.text+0x27): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
cppfile.cpp:(.text+0x36): undefined reference to `std::allocator<char>::~allocator()'
cppfile.cpp:(.text+0x4a): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
cppfile.cpp:(.text+0x5f): undefined reference to `std::allocator<char>::~allocator()'
cppfile.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0' collect2: error: ld returned 1 exit status
これは重複していると申し訳ありませんが、このような質問は見つかりませんでした。
変更 'cppfile.h'が効果的に'読みにextern "C" int型MyFunctionを()する; 'C++のコンパイルのためにシステムに組み込むだけのよう(' #ifdefの__cplusplus'ガードを使用して'/ usr/include'にあるファイル)は、' cppfile.h'ヘッダをC++ファイルに '#include 'しないようにしてください。あなたがそれをしないと、 'myFunction()'を呼び出そうとしているC++のコードは、[変更されたシンボル名](https://en.wikipedia.org/wiki/Name_mangling#C.2B.2B)を見つけようとします)。 –
1)各* .cファイルを別々にコンパイルしてください。同じ行でコンパイルとリンクを試みないでください。 (注:同じ行のコンパイル/リンクは可能ですが、それを正しく実行する必要があります)2)gccリンカーは、コマンドライン引数を左から右の順に処理します。 '-l'パラメータを扱うとき、解決される必要のある解決されていない参照がまだありません。コンパイル/リンク時に 'gcc cppfile.o cfile.o -lstdC++' –
user3629249
の順番でリンクコマンドラインを書いてください。C++はすべての関数の名前を変更します。したがって、コンパイルのステップでは、関数名がマングルされたオブジェクトファイルが必要になります – user3629249