3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

macのVSCodeでpythonのDb2ライブラリ ibm_db.connectを実行するとmallocエラー発生への対応策

Last updated at Posted at 2023-05-13

なんだか似たような話ばかり書いてますが、、、、。
macでpythonのDb2ライブラリ ibm_dbをimportすると発生するエラーへの対応策(Symbol not found: ___cxa_throw_bad_array_new_length )
の対応をした後、VScodeのJupyter notebookではなく、そのまま以下の ibm_db.connectを呼び出すtest.pyをVSCodeから実行したところ、

import ibm_db

DBNAME='xxxx'
USERID='xxxxxxx'
PASSWD='xxxxxxxxxxxxxxxx'
HOSTNAME='xxxxx.xxxxx.xxxxx.xxxx.xxxxx.com'
PORT=50001

conn= ibm_db.connect(f"DATABASE={DBNAME};HOSTNAME={HOSTNAME};PORT={PORT};PROTOCOL=TCPIP;\
                      UID={USERID};PWD={PASSWD};SECURITY=SSL;", "", "")
ibm_db.close(conn)

conn= ibm_db.connectの部分で以下のようなmallocエラーが発生しました。

python(32720,0x700007616000) malloc: *** error for object 0x7ff94901c790: pointer being freed was not allocated
python(32720,0x700007616000) malloc: *** set a breakpoint in malloc_error_break to debug

このエラーへの対応策を説明します。

参考:
Qiitaの記事macOSでGUIアプリの環境変数を設定する方法探求を参考にさせていただきました。

対応策

これは
macでpythonのDb2ライブラリ ibm_dbをimportすると発生するエラーへの対応策(Symbol not found: ___cxa_throw_bad_array_new_length )
で設定したDYLD_LIBRARY_PATHが設定されないために発生するエラーでした。

フォルダーを開く場合はそのフォルダーに.envを置いてその中にDYLD_LIBRARY_PATHが設定してあればこのエラーはでません。
例:

DYLD_LIBRARY_PATH=/usr/local/lib/gcc/8:$DYLD_LIBRARY_PATH

Dockから開いたVSCodeでファイル単品xxxx.pyを開いてしまうと、.envが読み込まれず、このエラーが出るようです。

VSCodeをDockから開いた時にもDYLD_LIBRARY_PATHを設定しておく必要があります。
その設定をするには以下のようにします。

以下のファイルをsetenv_DYLD_LIBRARY_PATH.plistというファイル名で~/Library/LaunchAgents/に置きます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key> 
    <string>setenv_DYLD_LIBRARY_PATH</string>
    <key>ProgramArguments</key>
    <array>
      <string>/bin/launchctl</string>
      <string>setenv</string>
      <string>DYLD_LIBRARY_PATH</string>
      <!-- 以下は必要応じて自分のPATHに変更 -->
      <string>/usr/local/lib/gcc/8:$DYLD_LIBRARY_PATH</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

この後システムをリブートするかログインし直せば、設定が有効になります。
今すぐ適用する場合は以下を実行します。

launchctl load ~/Library/LaunchAgents/setenv_DYLD_LIBRARY_PATH.plist

以上です。

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?