簡體   English   中英

無法在 linux (i686-w64-mingw32-g++) 上交叉編譯包含 sqlite 的 C++ 類(未定義的引用)

[英]Can't cross compile c++ class with sqlite included (undefined reference) on linux (i686-w64-mingw32-g++)

我試圖用 sqltie3 包含編譯我的 c++ 類。
我運行 Ubuntu 20.04。
為此,我使用 i686-w64-mingw32-g++ 交叉編譯器,我還使用 g++ 對其進行了測試,它可以完美運行,但不適用於 i686-w64-mingw32-g++ 編譯器。

我總是得到同樣的錯誤:

/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

這是我的頭文件(DBWrapper.h):

#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();
};

這是我的 CPP 文件 (DBWrapper.cpp):

#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_;
}

(對不起,我的英語不好)

我發現我只需要 sqlite3 作為編譯器的編譯目標文件 (sqlite3.o)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM