2017-04-16 7 views
-1

私は、完了したいプロジェクトにmySQL C APIを使用して始めようとしています。mySQLとCの問題

公式サイトからmySQL Community ServerのバージョンとmySQL Connector/Cをダウンロードしました。

Q1:Connector/ODBCもダウンロードする必要がありますか?違いはなんですか?

だから、これは私が学んだ基本的なプログラムであり、コンパイルとリンクしようとしています:

#include<stdio.h> 
#include<mysql.h> 

int main(int argc, char **argv) 
{ 
    printf("MySQL client version: %s\n", mysql_get_client_info()); 

    exit(0); 
} 

私はコンパイルと私が使うべきリンクするためのコマンド何にとして非常に混乱しています。私は次の操作を実行すると、この問題が発生した:

gcc mySQL.c -I/usr/local/mysql/include 
Undefined symbols for architecture x86_64: 
    "_mysql_get_client_info", referenced from: 
     _main in mySQL-a3f748.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

誰かがちょうどこれで私を助けることはできますか?私はずっと苦労しており、それはすべて非常に混乱しているようです。

私の質問は、エラーではなく、mySQL C APIライブラリのコンパイルとリンクです。

+0

@Olaf私のコードにはコンパイルの手順に欠陥があります。そのため、エラーに関する解答では解決できません。 –

+0

これは、コンパイルからではなく、リンクです。とdupは非常によくあなたの質問に答える!あなたはそれを読んだことがありますか? – Olaf

答えて

1

<mysql.h>は、必要な機能とタイプをと宣言しています。実際の関数の定義(その実装)は、リンクする必要があるライブラリにあります。

あなたは-l(小文字のL)オプションを使用していることを実行します、しかし

gcc mySQL.c -I/usr/local/mysql/include -lmysql 

あなたは非標準の場所にMySQLをインストールしているように見えることから、あなたが-Lオプションを使用する必要がありますライブラリーが配置されている場所(-Iオプションに似ています)を指定します

gcc mySQL.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysql 

これは、少なくともあなたのプログラムのビルドを行う必要があります。ただし、MySQLライブラリが静的ライブラリではなく、動的ライブラリ(DLL)である場合は、実行時ローダが動的ライブラリの場所を認識しないため、別の問題が発生する可能性があります。

gcc mySQL.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysql -Wl,-rpath=usr/local/mysql/lib