問題タブ [stdoptional]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - シンボルが存在するにもかかわらず、std::experimental::optional による未定義の参照
私が取り組んでいるプロジェクトで一連の CMake 設定をいじった後、以前に経験したことのないリンクの問題が発生しています。
.a
一言で言えば、次のシンボル (デマングル)を持つ静的ライブラリ (ファイル) があります。
しかし、実行可能ファイルをこのファイルとその方法を使用してコンパイルされたソースにリンクしようとすると、次のようになります。
buffer_pool
をインスタンス化し、他の多くのメソッドを使用しても、これは唯一のリンク エラーです。一方、これはクラスが持つ唯一のテンプレート化されたメソッドでもあります。
ライブラリにシンボルが存在する場合、このようなエラーの潜在的な原因は何ですか?
これまでのところ、私の唯一の「手がかり」は、オプションのクラスの名前が異なることです: std::experimental::optional
vs std::experimental::fundamentals_v1::optional
. これが原因でしょうか?
ノート:
- 実際の原因ではなく、潜在的な原因について質問しています (自己完結型の例がないと判断できません)。
- 安全のために、このテンプレート化されたメソッドを明示的にインスタンス化します。
- コンパイルは g++ 8.3.0 を使用し、
/usr/bin/ld
2.32.51 です。 - 私は Devuan 3 Beowulf (~= systemd なしの Debian 10 Buster) を使用しています。
の結果
/li>g++- v
: