Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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
Can';t交叉编译c++;在linux(i686-w64-mingw32-g+;+;+;)上包含sqlite的类(未定义的引用) 我尝试用SqLTiE3包含我的C++类来编译。 我运行Ubuntu 20.04。 为此,我使用了i686-w64-mingw32-g++交叉编译器,我还使用g++对其进行了测试,它可以完美地工作,但不能使用i686-w64-mingw32-g++编译器_C++_Linux_Sqlite_Cross Compiling - Fatal编程技术网

Can';t交叉编译c++;在linux(i686-w64-mingw32-g+;+;+;)上包含sqlite的类(未定义的引用) 我尝试用SqLTiE3包含我的C++类来编译。 我运行Ubuntu 20.04。 为此,我使用了i686-w64-mingw32-g++交叉编译器,我还使用g++对其进行了测试,它可以完美地工作,但不能使用i686-w64-mingw32-g++编译器

Can';t交叉编译c++;在linux(i686-w64-mingw32-g+;+;+;)上包含sqlite的类(未定义的引用) 我尝试用SqLTiE3包含我的C++类来编译。 我运行Ubuntu 20.04。 为此,我使用了i686-w64-mingw32-g++交叉编译器,我还使用g++对其进行了测试,它可以完美地工作,但不能使用i686-w64-mingw32-g++编译器,c++,linux,sqlite,cross-compiling,C++,Linux,Sqlite,Cross Compiling,我总是会遇到同样的错误: /usr/bin/i686-w64-mingw32-ld: DBWrapper.o:DBWrapper.cpp:(.text+0x61): undefined reference to `sqlite3_open' /usr/bin/i686-w64-mingw32-ld: DBWrapper.o:DBWrapper.cpp:(.text+0x12c): undefined reference to `sqlite3_close' 我的生成文件: mingw

我总是会遇到同样的错误:

/usr/bin/i686-w64-mingw32-ld: DBWrapper.o:DBWrapper.cpp:(.text+0x61): undefined reference to `sqlite3_open'
/usr/bin/i686-w64-mingw32-ld: DBWrapper.o:DBWrapper.cpp:(.text+0x12c): undefined reference to `sqlite3_close'

我的生成文件:

mingw       = i686-w64-mingw32-g++
SQLCOMPILE  = -I/usr/local/sqlite/include
CFLAGS      = -Wall
SRCFILES    = *.cpp
OBJFILES    = *.o
TARGETWIN   = progwx.exe

all: $(TARGETWIN)

    
$(TARGETWIN): $(OBJFILES)
    $(mingw) $(CFLAGS) $(OBJFILES) $(SQLCOMPILE) -o $(TARGET) -l sqlite3
    
$(OBJFILES): $(SRCFILES)
    $(mingw) $(CFLAGS) $(SQLCOMPILE) -c $(SRCFILES)
    
.PHONY: clean

clean:
    rm -f *.o
我将sqlite源代码放在$(SQLCOMPILE)中,编译器可以包含所有内容,除非调用sqlite3_open()函数。 我还将源代码编译到一个库(libsqlite3.a),以便-l标记可以找到它。
因为如果我没有将-lsqlite3标记放入,g++编译器也会带来相同的“未定义引用”错误

$ i686-w64-mingw32-gcc -c sqlite3.c  
$ ar rcs libsqlite3.a sqlite3.o
这是我的Headerfile(DBWrapper.h):


(抱歉我的英语不好)

我想出来了,我只需要sqlite3作为编译器的编译对象文件(sqlite3.o)。

我想出来了,我只需要sqlite3作为编译器的编译对象文件(sqlite3.o)

#pragma once
#include <string>
#include <stdexcept>
#include <sqlite3.h>

class DBWrapper {
    sqlite3 *db_;
    const int errCode;
public:
    DBWrapper(const std::string &dbname);
    DBWrapper(const DBWrapper&) = delete;
    DBWrapper& operator=(const DBWrapper&) = delete;
    sqlite3* operator*();
    ~DBWrapper();
};
#include "DBWrapper.h"


DBWrapper::DBWrapper(const std::string &dbname) : db_(nullptr), errCode(sqlite3_open(dbname.c_str(), &db_)){
    if(errCode) {
        throw std::runtime_error("ERROR at opening database!");
    }
}

DBWrapper::~DBWrapper() {
    sqlite3_close(db_);
}

sqlite3* DBWrapper::operator *() {
    return db_;
}