MySQL (MySQL에서 실행 가능한 C 함수) 용 UDF 함수를 만들려고하는데 왼쪽 및 오른쪽 문제가 있습니다. 나는 곧바로 코드를 작성하려고한다. (즉, 관련이있는 경우, 표준 = C99에 대해 아치 = i386을 위해)MySQL에서 UDF 함수를 만드는 중 오류가 발생했습니다.
my_bool sql_levenshtein_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void sql_levenshtein_deinit(UDF_INIT *initid);
longlong sql_levenshtein(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
내가 파일을 컴파일 : 나는 다음과 같은 선언 및 해당 구현을 포함하는 파일 levenshtein.c
있습니다. 내가 만든 .so 파일을 내 mysql 플러그인 폴더에 복사한다. 나는이 문제를 해결하기 위해 노력에서이 오류
ERROR 1127 (HY000): Can't find symbol 'sql_levenshtein' in library
을 받고, MySQL을로 가서 대신에이 명령의
mysql> create function sql_levenshtein returns int soname 'levenshtein.so';
성공적으로 함수를 만드는 명령을 실행, 나는 많이 들고 오지 않았다 유용한 정보. 인터넷 검색 후, 나는
nm
명령을 사용하여 .so 파일을 확인했습니다. 그리고이 출력을 가지고 :
00001600 t ___inline_memset_chk
00001870 t ___inline_strcpy_chk
U ___memset_chk
U ___stack_chk_fail
U ___stack_chk_guard
U ___strcpy_chk
00001220 T _cell_value
U _free
00001180 T _is_levenshtein_within_normthresh
00001100 T _is_levenshtein_within_thresh
00001460 T _levenshtein
00000cf0 T _levenshtein_k
U _malloc
00001400 t _minimum
00001660 T _normlevenshtein
000018f0 T _sql_levenshtein
000018c0 T _sql_levenshtein_deinit
00001710 T _sql_levenshtein_init
00001df0 T _sql_levenshtein_within_normthreshold
00001dd0 T _sql_levenshtein_within_normthreshold_deinit
00001d00 T _sql_levenshtein_within_normthreshold_init
00001c00 T _sql_normlevenshtein
00001be0 T _sql_normlevenshtein_deinit
00001b20 T _sql_normlevenshtein_init
U dyld_stub_binder
주 _sql_levenshtein
를, 그래서 함수가 존재하는 것처럼 보인다. 그 밖의 무엇이 도움이 될지 확신 할 수 없습니다. 귀하의 안내에 감사드립니다! 응답
커트
========= 업데이트는 언급합니다 : 글쎄, 그것은 가치가 무엇을, 나는 또한
mysql> create function _sql_levenshtein returns int soname 'levenshtein.so';
ERROR 1127 (HY000): Can't find symbol '_sql_levenshtein' in library
를했다 그래서이 아닌 것 같아 그것이 문제의 근본 원인입니다. 어쩌면 내가 뭔가를 놓친 것 같아.
'sql_levenshtein'과'_sql_levenshtein'은 같은 기호가 아닙니다. –
응답하도록 응답합니다. –
.so 파일을 올바른 위치에 정확하게 넣으시겠습니까? 어디 있니? –