首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux g++编译

Linux g++编译
EN

Stack Overflow用户
提问于 2013-07-23 04:52:29
回答 2查看 462关注 0票数 0

我是在linux上编程和在终端中编译的新手。我有三个文件:

sql.h

代码语言:javascript
复制
#ifndef SQL_H
#define SQL_H

#include "sqlite3.h"
#include <string>

class sqlite{
    
private:
    sqlite3 *db;
    sqlite3 *statement;
    
public:
    sqlite(const char* filename);
    void create_table();
};


#endif

sql.cpp

代码语言:javascript
复制
  #include "sql.h"
#include <iostream>

sqlite::sqlite(const char* filename){
    if((sqlite3_open_v2(filename, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)) == SQLITE_OK) //fájl létrehozása
        std::cout << "Database has been created successfully!" << std::endl;
    
    else{
        std::cout << "Oops, something went wrong, please try again!" << std::endl;  
    }
}   


void sqlite::create_table(/*const std::string &tableName, const std::string &columnNames*/){

    //std::string command = "CREATE TABLE " + tableName + columnNames;
    sqlite3_prepare_v2(db, "CREATE TABLE a (a INTEGER, b INTEGER)", -1, &statement, NULL);
    sqlite3_step(statement);
    sqlite3_finalize(statement);
    sqlite3_close(db);

}

main.cpp

代码语言:javascript
复制
#include "sql.h"
#include <string>
int main(){
    
    sqlite s = sqlite("database.db");
    s.create_table();
    return 0;
}

如果我尝试使用命令g++ -Wall -Werror main.cpp -lsqlite3 -o sqlite_program编译它,我会得到以下错误:

代码语言:javascript
复制
/tmp/ccKtrrtg.o: In function `main':
main.cpp:(.text+0x15): undefined reference to `sqlite::sqlite(char const*)'
main.cpp:(.text+0x21): undefined reference to `sqlite::create_table()'

这是我第一次尝试编译一个带有自定义头部的cpp。也许我应该用不同的命令来做这个?

更新:我已经更新了代码,它有buggy。:)现在它可以工作了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-23 05:01:51

您有多个输入文件,它们将形成一个单独的二进制文件。

通常的方法(对于较大数量的文件具有良好的伸缩性)是将每个源文件编译成一个二进制目标文件,然后将所有目标文件链接到最终的二进制文件。

代码语言:javascript
复制
g++ -Wall -Werror -o main.o -c main.cpp 
g++ -Wall -Werror -o sql.o  -c sql.cpp
g++               -o sqlite    main.o sql.o -lsqlite3
票数 4
EN

Stack Overflow用户

发布于 2013-07-23 04:54:08

尝试运行此命令

代码语言:javascript
复制
g++ -Wall -Werror main.cpp sql.cpp -lsqlite3 -o sqlite

这将编译您的sql.cpp文件并将其链接到可执行文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17797203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档