Cả nhà ới ời! Em mới bắt đầu học về hđh Linux mà ban đầu là lập trình C cho Linux. Các đàn anh có chỉ dẫn gì cho em học hỏi zới
Thông báo
Collapse
No announcement yet.
Lập trinh C và C++ cho Linux/Unix
Collapse
This is a sticky topic.
X
X
-
Rất đơn giản.
Bạn sử dụng 1 phần mềm text nào đó, gedit chẳng hạn. Và bắt đầu với helloworld.c như truyền thống của các thầy QTN, NTT.
Sau đó bạn đánh lệnh:
$gcc helloworld.c
$ ./a.out
hoặc
$gcc -c helloworld.c -o hello
$./hello
Yêu cầu: có kiến thức đầy đủ về MS DOSOpentdoors- Thành viên của Rock'n'Roll club
Comment
-
Nên dùng một cái IDE, cái mà F recommend đó là eclipse.
Chúc vuiFalleaf
Công ty TNHH Thương mại và Giao nhận R&P
58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
mail@falleaf.net - VP: (04) 36408561 - (08) 38119870
Comment
-
Nguyên văn bởi opentdoors Xem bài viếtRất đơn giản.
Bạn sử dụng 1 phần mềm text nào đó, gedit chẳng hạn. Và bắt đầu với helloworld.c như truyền thống của các thầy QTN, NTT.
Sau đó bạn đánh lệnh:
$gcc helloworld.c
$ ./a.out
hoặc
$gcc -c helloworld.c -o hello
$./hello
Yêu cầu: có kiến thức đầy đủ về MS DOS
Bạn sẽ cần phân biệt trình biên dịch thô và môi trường phát triển IDE. Trên nền Windows, chương trình thường là kiểu tất cả trong một như Visual C++ : vừa là trình soạn thảo văn bản, vừa biên dịch (compile), vừa liên kết (link), vừa dò lỗi (debug). Triết lý chung của Unix là sử dụng nhiều công cụ nhỏ, mỗi công cụ chỉ làm một việc và làm việc đó thật tốt, kết hợp các công cụ nhỏ với nhau. Với Linux, trình biên dịch là gcc (cho C++ là g++), trình soạn thảo văn bản riêng - bạn có thể dùng bất kỳ cái gì bạn thích, dò lỗi là gdb; môi trường IDE có thể là Kdevelop (nền KDE), CodeBlocks, Anjuta (nền Gnome), hoặc Eclipse (nền Java)
(còn tiếp)...
Comment
-
Đối với Visual Studio (IDE của MS), thì mọi thứ đều nằm trên đó, khi làm việc với nó, người ta sẽ có những thói quen nhất định. Một công cụ soạn thảo bất kỳ, có thể làm được khá nhiều việc. Tuy nhiên việc quản lý hệ thống, mới là việc mà các trình IDE chuyên dụng hỗ trợ nhiều.
Quan điểm làm việc nào cũng có cái tốt của nó, như một trình soạn thảo, từ việc tăng cường một số chức năng chỉnh sửa, rồi sau đó là tìm kiếm, rồi đến một số chức năng thêm thắt các nút để thay vì người ta phải gõ lệnh thì có thể bấm nút một cái chạy luôn,... Kết quả, tổng hợp nhiều thứ thường dùng đó lại, người ta đưa ra một công cụ là môi trường soạn thảo hay môi trường phát triển IDE.
Như vậy, ở đây vấn đề là tư duy phân chia công việc như thế nào. Ngay cả trên windows cũng có hàng loạt chương trình soạn thảo như: notepad, wordpad, notepad++, winedit, winedt, texmaker, ultraedit,... rất rất nhiều. Tương tự trên linux cũng vậy.
Tuy nhiên, sau một thời gian làm việc, chúng ta thấy rằng với mỗi một chương trình dịch, với mỗi một công cụ, nếu cứ phân việc nhỏ ra, thì kết quả là người ta có hàng tá việc phải làm thay cho việc bấm một cái nút.
Vậy thì mỗi lần chuyển đổi từ cái này sang cái khác, người ta sẽ gặp một vấn đề là cứ phải đi học hết cái này tới cái khác. Kết quả giải pháp là người ta gom một số thứ lại với nhau, tạo thành giải pháp cho một lớp các vấn đề. Cũng giống như người ta gom lại các vấn đề về ngôn ngữ theo kiểu MS, học C# thì coi như khỏi học các ngôn ngữ lập trình khác. Nhưng có thể người ta lại nghĩ theo kiểu Java là khỏi phải lo các platform.
Do vậy, theo cá nhân F nghĩ, thì không nên cứng nhắc với những hệ thống quan điểm, mà nên lựa chọn công cụ sử dụng theo từng thời điểm và từng đối tượng lao động trên công cụ đó.
Quan điểm và tư tưởng, định hướng,... cái nào dài, cái nào ngắn? Đánh giá sự phát triển của Eclipse trong thời gian qua, F vẫn recommend cái Eclipse cho việc phát triển phần mềm.
F rất muốn đọc tiếp các bài viết giới thiệu của bạn bqviet, phải nói rằng các bài viết của bạn rất ngắn, xúc tích và cung cấp khá nhiều thông tin cho người đọc. F thì viết lúc nào cũng dài dòng văn tự.
Chúc vui.Falleaf
Công ty TNHH Thương mại và Giao nhận R&P
58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
mail@falleaf.net - VP: (04) 36408561 - (08) 38119870
Comment
-
Nguyên văn bởi falleaf Xem bài viếtĐối với Visual Studio (IDE của MS), thì mọi thứ đều nằm trên đó, khi làm việc với nó, người ta sẽ có những thói quen nhất định. Một công cụ soạn thảo bất kỳ, có thể làm được khá nhiều việc. Tuy nhiên việc quản lý hệ thống, mới là việc mà các trình IDE chuyên dụng hỗ trợ nhiều.
Quan điểm làm việc nào cũng có cái tốt của nó, như một trình soạn thảo, từ việc tăng cường một số chức năng chỉnh sửa, rồi sau đó là tìm kiếm, rồi đến một số chức năng thêm thắt các nút để thay vì người ta phải gõ lệnh thì có thể bấm nút một cái chạy luôn,... Kết quả, tổng hợp nhiều thứ thường dùng đó lại, người ta đưa ra một công cụ là môi trường soạn thảo hay môi trường phát triển IDE.
Như vậy, ở đây vấn đề là tư duy phân chia công việc như thế nào. Ngay cả trên windows cũng có hàng loạt chương trình soạn thảo như: notepad, wordpad, notepad++, winedit, winedt, texmaker, ultraedit,... rất rất nhiều. Tương tự trên linux cũng vậy.
Tuy nhiên, sau một thời gian làm việc, chúng ta thấy rằng với mỗi một chương trình dịch, với mỗi một công cụ, nếu cứ phân việc nhỏ ra, thì kết quả là người ta có hàng tá việc phải làm thay cho việc bấm một cái nút.
Vậy thì mỗi lần chuyển đổi từ cái này sang cái khác, người ta sẽ gặp một vấn đề là cứ phải đi học hết cái này tới cái khác. Kết quả giải pháp là người ta gom một số thứ lại với nhau, tạo thành giải pháp cho một lớp các vấn đề. Cũng giống như người ta gom lại các vấn đề về ngôn ngữ theo kiểu MS, học C# thì coi như khỏi học các ngôn ngữ lập trình khác. Nhưng có thể người ta lại nghĩ theo kiểu Java là khỏi phải lo các platform.
Do vậy, theo cá nhân F nghĩ, thì không nên cứng nhắc với những hệ thống quan điểm, mà nên lựa chọn công cụ sử dụng theo từng thời điểm và từng đối tượng lao động trên công cụ đó.
Quan điểm và tư tưởng, định hướng,... cái nào dài, cái nào ngắn? Đánh giá sự phát triển của Eclipse trong thời gian qua, F vẫn recommend cái Eclipse cho việc phát triển phần mềm.
F rất muốn đọc tiếp các bài viết giới thiệu của bạn bqviet, phải nói rằng các bài viết của bạn rất ngắn, xúc tích và cung cấp khá nhiều thông tin cho người đọc. F thì viết lúc nào cũng dài dòng văn tự.
Chúc vui.
Cá nhân tôi cũng không có ý nói rằng cái nào hay hơn, tất cả là phụ thuộc vào người sử dụng. Càng không muốn khơi ra một flame war kiểu như "small tools vs IDE". Cộng đồng phần mềm mã mở / tự do đã có quá nhiều sự kiện thế rồi: nào là giấy phép GPL vs BSD vs MIT vs ..., rồi monolithic kernel vs micro kernel, hay Emacs vs Vi vs Vim ...
Lưu ý F là Eclipse thực ra cũng không phải là một IDE đầy đủ, nó chỉ gồm trình soạn thảo văn bản và các plug-in khác nhau đóng vai trò front-end, khi biên dịch mã nguồn nó vẫn phải gọi trình biên dịch thô cấp dưới. Các chương trình khác như Kdevelop, CodeBlocks, Anjuta cũng vậy. Bản chất của chúng là một cái giao diện đồ họa đẹp bao bọc bên trên những công cụ giao diện dòng lệnh cấp dưới cho tiện lợi và dễ sử dụng.
Danh sách đầy đủ các loại IDE có ở đây: http://en.wikipedia.org/wiki/List_of...t_environments
Tôi khuyến cáo nên sử dụng 3 IDE trên vì- Chúng vốn đã được phát triển từ lâu và nhiều chức năng
- Miễn phí, mã mở, tự do
- Cộng đồng hỗ trợ đằng sau đông đảo
Kdevelop là một IDE cực kỳ tốt nếu bạn vốn đã sử dụng môi trường đồ họa KDE (như Kubuntu chẳng hạn). Bộ tiện ích có sẵn và trong các plug-in của nó có thể sánh ngang ngửa với Visual Studio, nếu không muốn nói tốt hơn. Tài liệu hướng dẫn cũng đầy đủ, nhược điểm duy nhất là yêu cầu KDE.
Anjuta cũng có chức năng tương tự so với Kdevelop, nhưng yêu cầu môi trường Gnome.
CodeBlocks phát triển trên nền thư viện wxWidgets nên có thể chạy trên bất cứ hệ điều hành nào mà wxWidgets chạy (Linux, BSD Unix, Solaris, Mac, Windows đủ loại). Nhược điểm chính của cái này là tài liệu hướng dẫn rất kém. Bù lại nó hỗ trợ SDCC để lập trình cho PIC và 8051 nên có lẽ thích hợp với dân làm điện tử.
Comment
-
Nguyên văn bởi falleaf Xem bài viếtNên dùng một cái IDE, cái mà F recommend đó là eclipse.
Chúc vui
http://www.ibm.com/developerworks/op...1EclipsePrimer
Sau khi có cái nhìn bao quát chung về công cụ này, chuyển sang đọc tài liệu chi tiết mới thích hợp.
Comment
-
Nguyên văn bởi bqviet Xem bài viếtLưu ý F là Eclipse thực ra cũng không phải là một IDE đầy đủ, nó chỉ gồm trình soạn thảo văn bản và các plug-in khác nhau đóng vai trò front-end, khi biên dịch mã nguồn nó vẫn phải gọi trình biên dịch thô cấp dưới. Các chương trình khác như Kdevelop, CodeBlocks, Anjuta cũng vậy. Bản chất của chúng là một cái giao diện đồ họa đẹp bao bọc bên trên những công cụ giao diện dòng lệnh cấp dưới cho tiện lợi và dễ sử dụng.
Lắm thằng SV Tây nghèo cóc có tiền mua VS nó toàn phải dùng bộ SDK free rồi xài dòng lệnh như trên Linux chết cườiSome rights reserved!
Comment
-
Nguyên văn bởi vutamhoan Xem bài viếtEm thấy thằng VC++ hình như nó cũng thế mà, khi dịch, link, debug nó đều gọi đến chương trình ngoài đó thôi. Nó cũng support việc xài Makefile nữa thì phải he he he - đua đòi theo Linux
Lắm thằng SV Tây nghèo cóc có tiền mua VS nó toàn phải dùng bộ SDK free rồi xài dòng lệnh như trên Linux chết cười
Dùng dòng lệnh không phải vì nghèo, cũng không phải vì là tay mơ hay ra vẻ hacker. Đơn giản là người dùng quen với nó và thấy nó hiệu quả hơn. Nếu bạn dùng nhiều nền hệ điều hành một lúc sẽ thấy ngay giá trị của một chương trình soạn thảo văn bản chạy khắp nơi, một trình biên dịch chạy khắp nơi ... thay vì với mỗi hđh lại phải học một cái IDE riêng. Chỉ cần chuyển qua lại giữa Linux, Windows, FreeBSD Unix (chưa tính MacOS) ... là đủ chết rồi. Và sẽ còn đánh giá cao nữa nếu làm nhúng.
Comment
-
Make và makefile
(tiếp theo, 2)
Sau khi đã hiểu được triết lý chia nhỏ công cụ của Linux và làm quen với trình dịch dòng lệnh gcc và g++, bước tiếp theo là tìm hiểu về make.
Trừ khi viết ví dụ đơn giản cỡ 20 dòng lệnh, bất kỳ chương trình có ích nào cũng cần chia thành nhiều tập tin mã nguồn. Lúc này xuất hiện mấy vấn đề:- Làm thế nào để tự động hóa được việc biên dịch nhiều tập tin mã nguồn, không lẽ gõ bằng tay từng lệnh dịch
- Mô tả mối phụ thuộc giữa các tập tin, khi một tập tin chỉnh sửa thì bản thân nó và những tập tin phụ thuộc vào nó sẽ phải biên dịch lại, nhưng không nhất thiết phải biên dịch lại toàn bộ dự án. (Tưởng tượng ở dự án lớn mỗi lần sửa lại phải biên dịch toàn bộ thì sẽ thế nào.)
- Thực hiện tự động các công việc khác.
Make là tiện ích để giải quyết những vấn đề trên. Nó mô tả sự phụ thuộc giữa các công việc và tự động gọi các công cụ khác để tự động hóa công việc. Make được điều khiển bởi một tập tin đặc biệt gọi là makefile - về bản chất cũng là một tập tin mã nguồn. Và viết tập tin này cũng như là lập trình cho bản thân công việc biên dịch.
Có nhiều tiện ích make khác nhau, ngay cả VC++ cũng dùng nmake. Trên nền Linux, công cụ chính thống là GNU make.
Tài liệu về make vô thiên lủng, nhưng tốt nhất vẫn là tài liệu gốc tại đây http://www.gnu.org/software/make/manual/ trông có vẻ nhiều, nhưng thực tế chỉ cần đọc cỡ 3 chương đầu là đủ để làm.
Comment
-
Chào anh.
Em đọc nhiều bài viết của anh Việt rồi, thấy rất xúc tích và đáng học hỏi. Em xin đóng góp một link khá hay về tạo makefile:
Automating Program Compilation - Writing Makefiles
Và trang chủ của nó cũng giới thiệu vài bài viết khá hay về Unix Beginners, Intermediate Level, Advanced Topics, sẽ hiểu được cách dùng gcc, gcc++, ... Em đã đọc và thấy rất thú vị. Mình copy cái content cho mọi người xem:
Code:1. Unix Beginners 1. Compiling C/C++ Programs On Unix (archive) (~15 lynx pages) 2. Debugging With "gdb" (archive) (~11 lynx pages) 3. Automating Program Compilation Using Makefiles (archive) (~13 lynx pages) 4. Manipulating Files And Directories In Unix (archive) (~50 lynx pages) 2. Intermediate Level 1. Creating And Using C Libraries (archive) (~18 lynx pages) 2. Unix Signals Programming (archive) (~29 lynx pages) 3. Internetworking With Unix Sockets (archive) (~21 + ~44 lynx pages) 4. Accessing User Information On A Unix System (archive) (~38 lynx pages) 5. Graphics Programming 1. Basic Graphics Programming With The Xlib Library (archive) (~59 + ~44 lynx pages) 3. Advanced Topics 1. Unix And C/C++ Runtime Memory Management For Programmers (archive) (~69 lynx pages) 2. Parallel Programming - Basic Theory For The Unwary (archive) (~29 lynx pages) 3. Multi-Threaded Programming With The Pthreads Library (archive) (~60 lynx pages) 4. Multi-Process Programming Under Unix (archive) (~80 lynx pages)
Chúc mọi người thành công.Last edited by ngohaibac; 14-10-2008, 18:46.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
thấy các anh bàn luận sôi nổi em cũng vào góp vui một tí.
nói chung, em thấy là nếu là để code cho linux thì vim và emacs là nhất. Riêng Emacs các bạn có thể custom thành một IDE, có thể viết script để nó hiện từ gợi nhớ, nó có thể là một file browser, là một cái để viết code thì hiển nhiên rồi, có thể tích hợp debugger như GDB khá cool ( ngang với debugger của visual studio theo ý kiến của em ). Vim thì tất cả được làm ở terminal nên những việc này chỉ việt Ctrl-z để suspend nó ra terminal làm hết mọi việc rồi lại fg để bật nó lên.
vim và emacs ( GUI thì có gvim và emacs-gtk có cả bản cho windows, hoặc chạy trên cygwin cho windows) có các sử dụng khác hẳn với các gui tools khác. Nó cho viết script để thực hiện những việc lặp đi lặp lại hoặc những cái mà mình hay dùng. Dễ dàng custom chỉ cần có tí kiến thức về lập trình. khi soạn thảo, viết code, biên dịch không cần dùng đến chuột, f1...f12, không cần dùng đến del và insert cũng như muỗi tên trái, mũi tên phải nói chung là tiết kiệm thời gian vì tay chỉ cần để đúng tư thế gõ 10 ngón, không phải di chuyển nhều. Riêng cái nay thì không GUI tools nào có thể địch được. Vim là nhanh nhất nhưng mà phải nhớ lệnh nhiều.
Bình thường nhiều người vẫn nghĩ emacs phải cho những người lập trình "pro" nhưng sau một thời gian tìm hiểu em thấy cũng dễ thôi.
chỉ cần mất khoảng 2h vừa đọc vừa thực hành cái tutor có sẵn của emacs là đã có thể edit được kha khá rồi, còn cao cấp hơn thì chọn lấy một quyển sách hoặc tutor trên trang của IBM.
Với từng mode nó lại có lệnh riêng nên hay dùng mode nào thì vào manual tìm hiểu các lệnh của mode đó thôi. Ví dụ: ở mode soạn thảo latex chuẩn trong emac, dùng Ctrl-c Ctrl-f để biên dịch, Ctrl-c Ctrl-v để view DVI file. nếu cài thêm auctex ( một gói gồm các script viết riêng cho emacs để soạn thoải latex) thì còn cool hơn nó cho preview thẳng trong buffer. Viết code C, C++ rất đẹp, ví dụ bạn gõ một đống lệnh, nhưng mà các lùi dòng chưa được đẹp hoặc code lộn xộn vì chỉnh sửa và comment một số dòng. trong emacs để nó căn lề đúng như một người lập trình chuyên nghiệp thì chỉ việc đánh dấu đoạn muốn lùi dòng cho đúng ấn alt-x và gõ vào indent-region ( dùng tab để select cho nhanh ) là nó sẽ đẹp như style chuẩn
emacs có thể soạn thoải nhiều file trong dùng một cửa sổ. hỗ trợ các lệnh để biên dịch thẳng trong emacs, debug trong emacs, biên dịch gặp lỗi thì có thể chạy thẳng đến file chứa lỗi. Ngoài ra emacs còn rất nhiều tính năng hữu ích khác đang chờ chúng ta khám phá.
chúc vui.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment