2016-12-21 23 views
0

CMAKEのファイルをCLionを使用してsqlite3のの機能のための未定義の参照は、このコードを持っている:私がコンパイルしようとしたらC/C++ CMAKEで

#include <stdio.h> 
#include <stdlib.h> 
#include <sqlite3.h> 

int main() { 
    sqlite3 *db; 
    int rc; 

    rc = sqlite3_open("database.db", &db); 

    if (rc) { 
     fprintf(stderr, "Can't open database: %s!\n",  sqlite3_errmsg(db)); 
    } else { 
     fprintf(stderr, "Opened database successfully!\n"); 
    } 

    sqlite3_close(db); 
    return 0; 
} 

:ファイルmain.cには、このコードを持っている

cmake_minimum_required(VERSION 3.6) 
project(HelloSqliteC) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.c) 
add_executable(HelloSqliteC ${SOURCE_FILES}) 

/home/marcus/ide/clion/clion-2016.3.1/bin/cmake/bin/cmake --build  /home/marcus/projects/native/HelloSqliteC/cmake-build-debug --target HelloSqliteC -- -j 4 
[ 50%] Building C object CMakeFiles/HelloSqliteC.dir/main.c.o 
[100%] Linking C executable HelloSqliteC 
CMakeFiles/HelloSqliteC.dir/main.c.o: In function `main': 
/home/marcus/projects/native/HelloSqliteC/main.c:13: undefined reference to `sqlite3_open' 
/home/marcus/projects/native/HelloSqliteC/main.c:16: undefined reference to `sqlite3_errmsg' 
/home/marcus/projects/native/HelloSqliteC/main.c:21: undefined reference to `sqlite3_close' 
collect2: error: ld returned 1 exit status 
CMakeFiles/HelloSqliteC.dir/build.make:94: recipe for target  'HelloSqliteC' failed 
make[3]: *** [HelloSqliteC] Error 1 
CMakeFiles/Makefile2:67: recipe for target  'CMakeFiles/HelloSqliteC.dir/all' failed 
make[2]: *** [CMakeFiles/HelloSqliteC.dir/all] Error 2 
CMakeFiles/Makefile2:79: recipe for target  'CMakeFiles/HelloSqliteC.dir/rule' failed 
make[1]: *** [CMakeFiles/HelloSqliteC.dir/rule] Error 2 
Makefile:118: recipe for target 'HelloSqliteC' failed 
make: *** [HelloSqliteC] Error 2 

私はこの問題をさまざまな方法で解決しようとしましたが、成功しませんでした。 私はCLion C/C++を使用しています。私のOSはUbuntu 16.04で、autoconfを使ってsqlite3をインストールします。

テストでは、上記のmain.cを使用し、GCCを使用してコマンドラインで "-l sqlite3"をコンパイルして成功しましたが、CLionを使用します。

助けてください、ありがとう。

+1

[定義されていない参照/未解決の外部シンボルエラーとは何か、それを修正する方法は?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved- external-symbol-error-and-do-do-i-fix) – Olaf

+0

プロジェクトに外部ライブラリを追加するためのダイアログがCLionにあると仮定します。あなたはsqlite3のためにそれを行う必要があります。 CLionは 'CMakeLists.txt'を適切に再構築します。 – nega

+0

@Olaf、これは特にCLionの使用上の問題ではありません – nega

答えて

0

CLionはすべての建物とプロジェクトの設定にCMakeを使用しています。 CMakeLists.txtを手動で変更する必要があります。実際これはCMakeの質問です。あなたのCMakeLists.txtで

このラインはあなたの問題を解決します:

add_compile_options(-l sqlite3) 

しかし、実際にはCMakeのは、より洗練された依存関係発見システムを持っています。これを知るにはHow To Find Librariesを読んでください。

+0

これはうまくいかない=(。私は_ライブラリを探す方法_を読んでいます_。ありがとう。 – mark42

+0

add_exputableの前にadd_compile_optionsを追加しましたか? –

+0

はい、テストの前後ですが、動作しません。 – mark42

0

この問題はtarget_link_libraries(HelloSqlite3 LINK_PUBLIC sqlite3)またはtarget_link_libraries(projectName LINK_PUBLIC libraryName)で解決しました。