質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

798閲覧

c++のソースコードをclangでコンパイルの際、リンクのエラーが出てコンパイル出来ません。on mac です。osはOSXです

donkey

総合スコア24

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/11/29 10:58

編集2019/11/29 11:19

最近竸プロで書いたソースコードを自前の環境でコンパイルしようとした際、エラーが出てしまいます。オンラインジャッジでは動くのでソースコードが間違っている可能性は低いと考えています。c++の環境設定に関して困っています。

この辺のシステムに関して無知なので、何か知っている方が居ましたら少し教えて欲しいです。

竸プロのソースコード一応貼っておきます。グラフ問題をBFSしているだけです。

#include <set> #include <cstdio> #include <vector> #include <iostream> #include <utility> #include <queue> #include <algorithm> #define fir first #define sec second #define get(n) scanf("%d",&n); #define gets(s) string s;cin >> (s); #define All(s) (c).begin(), (c).end() #define chmin(x, y) x = min(x, y); #define chmax(x, y) x = max(x, y); #define rep(i, j) for (int (i)=0;(i)<(j);(i)++) #define repk(i, j, k) for(int (i)=(j);(i)<(k);(i)++) #define dump(x) cout << #x << " = " << (x) << endl; #define debug(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl; using namespace std; typedef long long int ll; const ll INF = 10241024; const int MOD = 1e9 + 7; int N,C,V; struct edge { int from, to, cost, longa; }; vector<vector<edge> > dist(51); void input(){ cin >> N >> C >> V; int b[V]; edge a[V]; rep(i, V){ cin >> a[i].from; } rep(i,V){ cin >> a[i].to;a[i].to--; } rep(i,V) cin >> a[i].cost; rep(i,V)cin >> a[i].longa; rep(i,V) { dist[a[i].from].push_back(a[i]); } } void solve(){ input(); int dp[N][C];//i番目に行くときc円で行ったならそのとき掛かった時間の最小値をdp[i][c]とする rep(i,N)rep(j,C) dp[i][j] = INF; dp[0][0] = 0; queue<edge> q; for(int i=0;i<dist[0].size();i++){ q.push(dist[0][i]); } int loc = 0; while(!q.empty()) { edge e = q.front();q.pop(); for(int i=0;i<dist[e.to].size();i++){ q.push(dist[e.to][i]); } for(int i=0;i<C;i++){ if(i+e.cost > C) break; if(dp[e.to][i+e.cost] != INF) { chmin(dp[e.to][i+e.cost], dp[e.from][i] + e.cost) } else { dp[e.to][i+e.cost] = e.cost; } } } int ans = INF; rep(i,C){ chmin(ans ,dp[N][i]); } cout << ans << endl; } int main () { solve(); return 0; }

次にエラーメッセージ

ndefined symbols for architecture x86_64: "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from: std::__1::vector<std::__1::vector<edge, std::__1::allocator<edge> >, std::__1::allocator<std::__1::vector<edge, std::__1::allocator<edge> > > >::__vallocate(unsigned long) in code-a1adce.o //一部省略 ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

clang -vした時

Apple clang version 11.0.0 (clang-1100.0.33.8) Target: x86_64-apple-darwin19.0.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin

コンパイルする際のコマンド

gcc -g -o0 code.cpp

どなたか分かる方いましたら回答のほどをよろしくお願いしたします。わからなくとも何か参考になる文献をご存知であったり、少し心当たりがあると言った具合で回答していただいても構いませんので、気軽に回答して頂ければ嬉しいです。

追記
すいません… 私がアホだった様です。以下のコマンドで通りました。

c++ code.cpp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2019/11/29 11:06

コンパイルした際のコマンドを記載してください。
donkey

2019/11/29 11:07

分かりました。修正いたします。
guest

回答1

0

ベストアンサー

gccではなく、g++を使ってみてはいかがでしょうか。

投稿2019/11/29 11:15

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donkey

2019/11/29 11:21

回答ありがとうございます。g++で通りました。
donkey

2019/11/29 11:31 編集

C/C++に詳しいとお見受けして厚手がましいですが、後学の為に少し質問よろしいでしょうか? gccはcコンパイラという事でコンパイルした時c++のヘッダーファイルが見つからず失敗してしまったという事で良いのでしょうか? 私が不快に感じる事は無いので、この質問を無視していただいても結構です。またこれ以上質問することは避けますのでもし答えて頂けるのなら気軽にお願いします。
SaitoAtsushi

2019/11/29 14:38 編集

gcc や g++ はいわゆる「コンパイラドライバ」です。 プリプロセス、コンパイル、リンクといった各工程のソフトウェアをうまいこと呼び出して処理するもので、実際にはいくつかのソフトウェアが背後で動いています。 失敗しているのはコンパイルではなくリンクですね。 見つからないのはヘッダファイルではなくライブラリ (内にあるはずのシンボル) です。 個別のコンパイルは拡張子を見て種類を判断するのですが、リンクすべきライブラリに関してはコマンドによってデフォルトが違うのです。 (デフォルトの挙動が違うだけなのでもしやりたければ gcc でも適切にコマンドラインオプションを与えれば C++ 用のライブラリの結合までできるはずですが、普通はあえてそういうことはしませんね。)
donkey

2019/12/02 10:11

説明ありがとうございます。礼を言うのが遅くなってしまい申し訳ありません。 自分の言っている事が見当違いであることを理解しました。自分の勉強不足を補ってこれからも精進していく様に頑張ります。回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問