Sau khi build file liên kết từ source C và chia sẻ code sang máy khác, có cần build lại source code C không?

Em muốn build file liên kết .so cho Debian và .dll cho Windows từ source code C.
Vậy sau khi build và chia sẻ code sang máy Debian và Windows khác, có cần build lại source code C không?

Em cảm ơn ạ !

Bạn hiểu “build” nghĩa là gì? Nếu mã nguồn của bạn được compile thành mã máy và sau đó bạn đóng gói thành gói cài đặt thì khi cài đặt có đầy đủ hoặc gói cài đặt bạn chỉ đóng kèm một vài thư viện liên kết động khi cài hiện lên thông báo yêu cầu có Microsoft Visual C++ Redistributable (bên Windows) hoặc libc6 hay cái gì đó bên Linux để người dùng cuối có thể dùng.

Còn nếu bạn không thích đóng gói, bạn có thể tự xài bằng cách chép và cấu hình thủ công các thứ yêu cầu (gọi là requirements) cho phần mềm của bạn. Tại sao lại phải có mấy cái requirements này? Tại vì như câu hỏi của bạn, bạn sử dụng các thư viện liên kết khác không phải do bạn viết nên nếu không kèm theo nó thì phần mềm đâu chạy được. Tất nhiên, không phải khi kèm theo là đều đóng gói 1 cục vào thư mục của bạn, nó trở nên quá khổng lồ, cồng kềnh, nhất là với những phần mềm dùng đến cơ sở dữ liệu, không nhẽ bạn đóng gói nguyên Microsoft SQL Server?

Đã build rồi mà mang qua máy khác cũng phải build thì mang qua máy khác là mang cái gì? Hiểu đơn giản build là làm bánh ngọt, khách hàng mua bánh mà còn phải trộn bột, đường, trứng thì thua :smiley:

Túm lại: bạn cần phải đi chậm lại, học vài thứ căn bản, và trở thành người sử dụng máy tính thành thạo đi đã, bớt hỏi những cái cao siêu mà người trả lời có khi phải thảy cho bạn một chồng sách thì mới giải thích được. Nếu bạn không biết như thế nào thi cứ theo cách của mình là how to software works, hoặc when/ why compile source code,… cứ tìm bằng tiếng Anh là người ta giải thích cho cặn kẽ. Tiếng Anh kém thì cứ chuyển câu hỏi tiếng Việt của bạn vào công cụ dịch, nó ra câu tiếng Anh rồi paste vào Google, đó là cách mà mình tự học từ zero và trở thành 1 lập trình viên sau thời gian rất ngắn, có… 12 năm à :smiley:

1 Like

Em hỏi có phần không rõ, em có nhu cầu build file C sang .so, .dll, .dylibs rồi chia sẻ những file liên kết này sang những máy khác, hy vọng chúng không yêu cầu build lại. Em không chắc .dll nó hoạt động với tất cả các phiên bản windows hay không, hay trong phạm vi nào, và .so cũng vậy.

Với Android thì các file .so có lẽ cần build riêng, chỉ định cho từng chipset như android_x86, android_arm64, …

Các máy khác cũng như vậy. Khác bộ xử lý hoặc kiến trúc là phải build riêng cho hệ điều hành/ kiến trúc đó. Nếu không làm vậy, ngoài việc không chạy được, còn tồn tại khả năng chạy ổn định của phần mềm là thấp, ví dụ như hiện nay nhiêu phần mềm 32 bit cổ xưa chạy trên Win 10, Win 11 lạng quạng dù Microsoft có hỗ trợ tương thích ngược khá tốt. Có nghĩa là bạn phải phát hành phần mềm theo từng hệ điều hành/ máy mà bạn muốn người dùng sử dụng. Còn răc rối quá thì hoặc hạn chế lại hoặc cung cấp mã nguồn cho người ta tự build lấy chứ khi đã build thành mã máy thì thua, không đúng hệ là không chạy được đâu.

Em cảm ơn ạ.
Em thấy có sự liên quan nên đã tìm hiểu tuy chưa được sâu về cơ chế của LLVM, thường được sử dụng trong các trình biên dịch.
Thì em nhận thấy dường như LLVM phải if else từng kiến trúc một, bảo trì cũng như cập nhật liên tục nếu muốn hỗ trợ những kiến trúc mới. Đó quả là khối lượng công việc đòi hỏi khối lượng và sự chuyên sâu lớn. Vậy em muốn tạo 1 thư viện bậc cao cho 1 ứng dụng app, như là request API (ví dụ), có sử dụng C mà hỗ trợ đầy đủ các kiến trúc từ windows, android, macos, linux dường như là quá sức với em để khiến nó ổn định và nên tìm một cách hiệu quả hơn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?