Help us understand the problem. What is going on with this article?

-lstdc++を付けてもundefined reference to `operator new(unsigned)'のエラーが出る場合について

More than 3 years have passed since last update.

概要

undefined reference to `operator new(unsigned)'

のエラーが大量に出てなんだと思ったら

-lstdc++

付けないと出るよとの事だったので、付けてコンパイルするも相変わらずコンパイルできず。

そもそもg++でコンパイルしてるんだからデフォルトで付けてgcc呼ばれてるのではと思いつつ試行錯誤したときの話

-m32オプションが悪さしてた

結局-m32オプションが悪さしていました。

CentOS5 x86_64にてopensslのライブラリを-m32オプションを付けずにビルド。
その後、そのopensslライブラリをリンクした別のプログラムを-m32オプションを付けてビルド。

そうすると

undefined reference to `operator new(unsigned)'

のエラーがopenssl側のライブラリで大量に出るといった具合です。
32bitと64bitで動作が変わる関数に関しては未定義と言われて当然かもしれないなとか思いつつ、

ぐぐった際に-lstdc++付けろ以外の回答がまるで見つからないので同じようにはまった人の為に書き残しておきます。

ちなみに解決策としてはopensslライブラリを-m32オプションでビルドするか、または-m32付けずに本体のアプリケーションビルドするかして、どっちかに統一すれば治ります。

new以外でエラーが出なかったのがちょっと気になります。それ以外にbit数が変わって動作が変わるような関数使ってないからですかね・・・

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away