作者NealPope (尼爾教皇)
看板Linux
標題[問題] 想請教如何在Linux上寫C連資料庫
時間Fri Jul 17 00:04:39 2020
各位前輩抱歉~
以往都是用Windows的OS
windows下開發連資料庫都ok
最近接觸到Linux小有認知
目前公司有主Server
但必須在Linux用C語法操作
去連到Server的MariaDB
做存取資料的動作
而且公司內部每台Linux版本都不同
有Google但老實說還是沒概念
想請教前輩有沒有寫過類似的case
可以幫小弟指點迷津。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.141.160.173 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1594915481.A.EF8.html
1F:→ bluecadence: 你要先安裝 mariadb 的 development lib 以及 header 07/17 01:02
2F:→ bluecadence: files。例如在 debian 上,你得安裝 libmariadbclien 07/17 01:02
3F:→ bluecadence: t-dev 07/17 01:03
4F:→ bluecadence: 系統安裝套件理論上應該會自動把 lib PATH 搞定。 07/17 01:06
5F:→ bluecadence: 所以你寫C的時候只要把 mysql.h 正確 include 進來, 07/17 01:07
6F:→ bluecadence: 就能使用 client APIs 了。 07/17 01:09
7F:→ bitlife: 開發環境如同樓上推文.另外就是api差異,windows很多年沒 07/17 08:53
8F:→ bitlife: 用不確定現在的主流api架構為何(以前是odbc,以及各程式語 07/17 08:54
9F:→ bitlife: 言在其上架構的class library),Java則是jdbc(以及建構在 07/17 08:55
10F:→ bitlife: jdbc上的各框架的class library), linux則是各db提供的c 07/17 08:55
11F:→ bitlife: api,概念上有點像php. 可以找c範例及php範例研究一下,基 07/17 08:56
12F:→ bitlife: 本的CRUD很快就能弄出來,進階的再詳讀manual 07/17 08:57
13F:推 relaughter: 照理說只要安裝 mysql client 就可以連到 server 07/18 23:17
14F:→ relaughter: 抱歉沒看仔細,要用 C 去 call api,可能要找文件 07/18 23:18
15F:→ NealPope: 我編譯下gcc conn.c -o -mdb.o -lmariadbclient -lpthre 07/21 10:53
16F:→ NealPope: ad -lm -ldl -lssl -lcryp 07/21 10:53
17F:→ NealPope: 它回 /bin/ld: unrecognised emulation mode: db.o 07/21 10:56
18F:→ NealPope: Supported emulations: elf_x86_64 elf_x86_64 elf32_x8 07/21 11:00
19F:→ NealPope: 6_64 elf_i386 i386lunux elf_liom elf_klom 07/21 11:00
20F:→ NealPope: collect2: error: ld returned 1 exit status 07/21 11:01
21F:→ NealPope: 這是什麼原因呢QQ 07/21 11:01
22F:→ bitlife: 你應該是想要編譯成mdb.o? 把檔名前面的 - 號拿掉 07/21 12:06
23F:→ NealPope: 顯示 cannot find -lmariadbclient 07/21 15:30
24F:→ NealPope: collect2: error: ld returned 1 exit status 07/21 15:32
25F:→ NealPope: 一直編譯失敗QQ 07/21 15:53
26F:→ bitlife: 那意思是找不到mariadbclient.a 用-L指定所在目錄給gcc 07/21 16:12
27F:→ bluecadence: cc `mysql_config --libs` 07/21 16:28
28F:→ bluecadence: 或者 cc `mariadb_config --libs` 如果是mariadb 07/21 16:29
29F:→ bluecadence: 你在 shell 底下下指令 mariadb_config --libs 就會 07/21 16:34
30F:→ bluecadence: 知道這在做什麼事了 07/21 16:35
31F:→ NealPope: 有東西出來了! 07/22 08:26
32F:→ NealPope: 它跑出a.out 07/22 08:34
33F:→ NealPope: a.out是執行檔嗎? 07/22 09:04
34F:→ bitlife: 如果你後來的命令沒用 -o 指定輸出檔名,那確實會叫a.out 07/22 09:39
35F:→ bitlife: 這些都基本命令,如果你後續要在linux上生活一陣子,要善用 07/22 09:39
36F:→ bitlife: man指令 man gcc 07/22 09:39
37F:→ NealPope: 突然有個問題 07/23 09:24
38F:→ NealPope: 有台32位元的Linux下mysql_config --libs,它顯示mysql_ 07/23 09:35
39F:→ NealPope: config: command not found 07/23 09:35
40F:→ NealPope: 要如何讓這台32位元的也能順利gcc編譯出執行檔呢 07/23 09:36
41F:→ bitlife: 你這樣問題會問不完,看你們急不急,急就請個臨時顧問,不急 07/23 10:02
42F:→ bitlife: 就去看一下基本shell概念,工程師如果連環境都不熟,編譯成 07/23 10:03
43F:→ bitlife: 功也只是災難的開始 07/23 10:03
44F:噓 brli7848: mariadb的wiki翻完了沒? 07/23 14:27
46F:推 ctrlbreak: 學一下怎麼包成docker再佈署到不同機器(linux)... 07/25 12:15