Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
‘;sqlite3_prepare_v2’;未在此范围中声明_Sqlite_Cmake - Fatal编程技术网

‘;sqlite3_prepare_v2’;未在此范围中声明

‘;sqlite3_prepare_v2’;未在此范围中声明,sqlite,cmake,Sqlite,Cmake,由于sqlite3的版本太旧,我安装了另一个新版本的sqlite3。新版本已安装在以下路径中: /export/home/hh/hh/sqlite/include /export/home/hh/hh/sqlite/lib 我在cmake中修改并使用它来查找新的sqlite3。MESSAGE的输出显示cmake可以找到新版本的includes和libs: -- SQLite3 include: /export/home/hh/hh/sqlite/include -- SQLite3 lib:

由于
sqlite3
的版本太旧,我安装了另一个新版本的
sqlite3
。新版本已安装在以下路径中:

/export/home/hh/hh/sqlite/include
/export/home/hh/hh/sqlite/lib
我在
cmake
中修改并使用它来查找新的
sqlite3
MESSAGE
的输出显示
cmake
可以找到新版本的
includes
libs

-- SQLite3 include: /export/home/hh/hh/sqlite/include
-- SQLite3 lib: /export/home/hh/hh/sqlite/lib/libsqlite3.so
-- SQLite3 IS USED
当我安装我的项目时,发生了错误
“sqlite3\u prepare\u v2”未在此范围内声明。但是新版本中包含了
sqlite3\u prepare\u v2
,应该声明它。我认为可能的原因是
cmake
找不到新版本,而是找到了旧版本。有什么帮助吗?提前谢谢你

My
FindSQLite3.cmake

if (SQLITE3_LIBRARIES AND SQLITE3_INCLUDE_DIRS)
  # in cache already
  set(SQLITE3_FOUND TRUE)
else (SQLITE3_LIBRARIES AND SQLITE3_INCLUDE_DIRS)
  # use pkg-config to get the directories and then use these values
  # in the FIND_PATH() and FIND_LIBRARY() calls
  if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6)
    include(UsePkgConfig)
    pkgconfig(sqlite3 _SQLITE3_INCLUDEDIR _SQLITE3_LIBDIR _SQLITE3_LDFLAGS _SQLITE3_CFLAGS)
    MESSAGE(STATUS "Test ${_SQLITE3_INCLUDEDIR} ${_SQLITE3_LIBDIR} ${_SQLITE3_LDFLAGS} ${_SQLITE3_CFLAGS}")
  else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6)
    find_package(PkgConfig REQUIRED)
    #MESSAGE(STATUS "TEST-1")
    if (PKG_CONFIG_FOUND)
      pkg_check_modules(_SQLITE3 REQUIRED sqlite-3.11)
    #MESSAGE(STATUS "TEST-2")
    endif (PKG_CONFIG_FOUND)
  endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6)

   find_path(SQLITE3_INCLUDE_DIR
    NAMES
      sqlite3.h
    PATHS
      ${_SQLITE3_INCLUDEDIR}
      /export/home/hh/hh/sqlite/include
  )

  find_library(SQLITE3_LIBRARY
    NAMES
      sqlite3
    PATHS
      ${_SQLITE3_LIBDIR}
      /export/home/hh/hh/sqlite/lib
  )

  if (SQLITE3_LIBRARY)
    set(SQLITE3_FOUND TRUE)
  endif (SQLITE3_LIBRARY)

  set(SQLITE3_INCLUDE_DIRS
    ${SQLITE3_INCLUDE_DIR}  
  )

#MESSAGE(STATUS "${SQLITE3_INCLUDE_DIR}")

  if (SQLITE3_FOUND)
    set(SQLITE3_LIBRARIES
      ${SQLITE3_LIBRARIES}
      ${SQLITE3_LIBRARY}
    )
#MESSAGE(STATUS "${SQLITE3_LIBRARIES} ${SQLITE3_LIBRARY}")
  endif (SQLITE3_FOUND)

  if (SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES)
     set(SQLITE3_FOUND TRUE)
  endif (SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES)

  if (SQLITE3_FOUND)
    if (NOT Sqlite3_FIND_QUIETLY)
#      MESSAGE(STATUS "Found Sqlite3: ${SQLITE3_LIBRARIES}")
    endif (NOT Sqlite3_FIND_QUIETLY)
  else (SQLITE3_FOUND)
    if (Sqlite3_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Could not find Sqlite3")
    endif (Sqlite3_FIND_REQUIRED)
  endif (SQLITE3_FOUND)

  # show the SQLITE3_INCLUDE_DIRS and SQLITE3_LIBRARIES variables only in the advanced view
  mark_as_advanced(SQLITE3_INCLUDE_DIRS SQLITE3_LIBRARIES)

endif (SQLITE3_LIBRARIES AND SQLITE3_INCLUDE_DIRS)
MyCMakeLists.txt中的代码行:

LIST(APPEND CMAKE_INCLUDE_PATH "/export/home/hh/hh/sqlite/include")
LIST(APPEND CMAKE_LIBRARY_PATH "/export/home/hh/hh/sqlite/lib")

LIST(APPEND CMAKE_MODULE_PATH "/export/home/hh/hh/iRoot-make/cmake")

FIND_PACKAGE(SQLite3 REQUIRED)

MESSAGE(STATUS "SQLite3 include: ${SQLITE3_INCLUDE_DIRS}")
MESSAGE(STATUS "SQLite3 lib: ${SQLITE3_LIBRARIES}")

IF(SQLITE3_FOUND)
    MESSAGE(STATUS "SQLite3 IS USED")
    INCLUDE_DIRECTORIES(${SQLITE_INCLUDE_DIRS})
    LINK_DIRECTORIES(${SQLITE3_LIBRARIES})
ELSE(SQLITE3_FOUND)
    MESSAGE(STATUS "SQLite3 IS NOT FOUND")
ENDIF(SQLITE3_FOUND)

aux_source_directory(. DIR_SRCS)
ADD_EXECUTABLE(test ${DIR_SRCS})

#TARGET_LINK_LIBRARIES(test ${SQLITE3_LIBRARIES} ${Boost_LIBRARIES} ${MPI_LIBRARIES} ${VTK_LIBRARIES})

# set location of binary generated by the program, 
# here PROJECT_BINARY_DIR = DIR OF build
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

# set location of lib generated by the program
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

install(TARGETS test DESTINATION bin)
sqlite3.h
包含在我的标题中:

#include "sqlite3.h"

在相应的cpp文件中使用
sqlite3\u prepare\u v2

设置
sqlite3\u库
sqlite3\u在
CMakeCache.txt
中包含\u DIRS
(或使用cmake gui),以便它们指向所需的库版本。删除
SQLITE3\u FOUND
SQLITE3\u定义
并重新运行CMake。

向我们展示如何使用
CMakeLists.txt
中的
find\u包
的结果来编译程序。当然还有你的程序。你好@Tsyvarev我已经更新了帖子。
find_package(SQLite3)
设置变量
SQLite3\u INCLUDE_DIRS
,但是你使用
SQLITE_INCLUDE_DIRS
(没有
3
)来
包含目录()
@Tsyvarev抱歉这个错误,我把它改成了
SQLite3\u INCLUDE_DIRS
,并重新安装了项目,但出现了数百个错误
未定义的引用
。因此您需要取消注释
目标链接库
呼叫。您好,感谢您的回复,如何设置
SQLITE3_库
SQLITE3_包含_目录
以及如何删除找到的
SQLITE3_和
SQLITE3_定义
?你能详细解释一下你的解决方案吗?谢谢。正如我所描述的:您可以使用cmake gui查看所有变量及其值。或者,您可以在生成目录中编辑cmakcache.txt。