2011-06-29 9 views
3

MySQLで使用するUDFを作成しようとしています。私はgccを使用して関数をコンパイルし、正しく動作します。その後、.soファイルをプラグインディレクトリに移動し、MySQLサーバーに入力しました。しかし、代わりにそれが必要としての機能を作成する、サーバーは次のエラーが出力さMySQLのudf作成でエラー1127

CREATE FUNCTION mynew_udf RETURNS INT SONAME 'mynew_udf.so'; 

:私は、次のコードを使用して関数を作成しようとしまし

ERROR 1127 (HY000): Can't find symbol 'mynew_udf' in library

誰もがこのためのソリューションを知っていますなぜこのエラーが発生するのでしょうか?ありがとうございました。

答えて

4

このエラーは、以下のとおりです。mynew_udfシンボルが共有ライブラリに見つかりません。

あなたのコードがないと、なぜこれが当てはまるのか分かりません。あなたのソースコードには、このような機能シグネチャがありますか?

my_bool mynew_udf_init(UDF_INIT *, UDF_ARGS *args, char *message); 
int mynew_udf(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); 

線151 here上に述べたように:「これらは右またはmysqldのでなければなりませんが、シンボルを見つけることができません!」

あなたは右のシンボルを持っていると思うなら、あなたもmynew_udf.so内のシンボルを見てnmを使用することができます。

nm mynew_udf.so | grep mynew_udf 
+0

ありがとうございました。私は別の関数のコピーされたコードを使用していましたが、関数名を変更するのを忘れてしまいました。 – user821411

+0

答えを受け入れることはできますか? –

+0

そして 'nm mynew_udf.so | grep mynew_udf'は期待される結果を生成しますが、MySQLはまだそれが見つからないと不平を言いますか? – aroth

0

この構文の仕事で罰金:スタートフォルダから

gcc -shared -lstdc++ -fPIC -DMYSQL_DYNAMIC_PLUGIN -I /usr/include/ -I /usr/local/include/ -I /opt/jasperserver-4.5.0-0/mysql/include/ -o nomefile.so nomefile.cc

cp nomefile.so /PATH/mysql/lib/plugin/

DB接続文字列

/PATH/mysql/bin/mysql -uroot -p test

MYSQL> CREATE AGGREGATE FUNCTION example RETURNS REAL SONAME 'udf_example.so';

関連する問題