2015-09-27 30 views
7

Để làm rõ làm rõ: Tôi biết cách tạo thư viện trong Xcode bằng cách sử dụng obj-c hoặc nhanh. Tôi biết cách sử dụng chúng trong các dự án. Tôi biết cách biên dịch các dự án này để mọi thứ hoạt động. Những gì tôi không biết là làm thế nào để lấy mã nguồn C nguồn mở (hehe) và xây dựng/tạo/biên dịch nó thành một thư viện.Cách "tạo" mã C++ vào thư viện cho xcode


Chỉ cần làm rõ tất cả mọi thứ dưới đây: Tôi đang tìm kiếm một cách để sử dụng thư viện c trong một ứng dụng Swift, điều này có nghĩa sử dụng Xcode. Các thư viện c không cần phải được xây dựng với/trong Xcode, tôi tốt với việc sử dụng các công cụ khác.


Tôi thường viết tất cả mã tôi sử dụng và tiếc là tôi chỉ viết Swift trong Xcode. Vì vậy, tôi hơi chậm sử dụng các khung công tác/thư viện. Bây giờ tôi thực sự muốn khám phá Tesseract OCR và tôi đang gặp khó khăn khi xây dựng các thư viện cần thiết. Đối với tôi, tốt hơn là nên hiểu cách thức hoạt động của bản thân và có thể tự làm được điều này và không chỉ nhìn vào Github và tìm các nguồn được biên dịch trước.

Các dự án bên dưới đều xử lý vấn đề này theo cách khác. Phiên bản iOS sử dụng Libraries được biên dịch trước. (.a tệp) Phiên bản OSX sử dụng các dự án có chứa các tệp thư viện (chưa được biên soạn).

An iOS compiled version

An OSX compiled version

libjpeg ví dụ về một thư viện mà không thể chỉ kéo và thả.

Sử dụng bia sẽ chỉ cài đặt nó dưới dạng công cụ dòng lệnh, không tạo lib.

install Tesseract with homebrew

Tôi có vấn đề là tôi biết quá ít về những thư viện c, và làm thế nào để xây dựng họ thậm chí google này một cách hiệu quả.

Câu hỏi của tôi:

  • Làm thế nào để bạn biên dịch/xây dựng mã c vào một file .a?
  • Làm thế nào để bạn tạo một dự án xcode xây dựng một khuôn khổ dựa trên mã số ? (tùy chọn)
  • Từ vựng phù hợp cho tất cả điều này là gì?

Tôi không tìm kiếm câu trả lời cụ thể của Tesseract. Tôi muốn học cách tự làm điều này.

about static libraries

Bài viết này không đề cập đến làm thế nào để thực sự thêm chương trình c và để làm cho nó xcode. Phần về không gian làm việc là thú vị mặc dù.

Article on building c project in Xcode

Điều này thực sự thực sự có liên quan. Tuy nhiên tôi không thể tìm thấy thực thi trong Tesseract ví dụ. Tất cả các tùy chọn đều chuyển sang màu xám khi thực hiện bước 5.

Điều này có vẻ đẹp: simple c++ procect Tại sao không thể trông giống như vậy? :)

+2

Thuật ngữ đúng là "thư viện được liên kết tĩnh". Thực hiện tìm kiếm trên web cho "xcode xây dựng thư viện liên kết tĩnh" và bạn nên tìm một hướng dẫn phong nha. Có lẽ trên SO. – user4581301

+1

Tôi đã thử điều đó trước đây. Tất cả các bài viết về xây dựng một dự án xcode như một thư viện/khung công tác. Không phải về cách xây dựng một "dự án" c như libjpeg được liên kết. –

Trả lời

2

Nếu bạn muốn xây dựng Tesseract, hãy làm theo các hướng dẫn cho một hệ thống UNIX:

./autogen.sh 
./configure 
make 
sudo make install 
sudo ldconfig 

Bạn không cần phải, trong thực tế, bạn không nên sử dụng xcode (mà chỉ đơn giản là một GUI/lối vào) nhưng gắn bó với những gì mỗi thư viện yêu cầu bạn sử dụng. Trong một số trường hợp, có thể xây dựng bằng xcode. Dự án có ý định sử dụng xcode cho tòa nhà của họ, có xu hướng bao gồm tệp dự án xcode.

Trình biên dịch của Apple là llvm/clang, vì vậy nó có thể có một số khác biệt nhỏ so với GNU gcc/g ++ của Linux.

EDIT

Bạn cần phải cài đặt đầu tiên leptonica và automake:

brew install automake 
brew install leptonica 

Sau đó chạy các hướng dẫn xây dựng. Như bạn sẽ thấy trong make install thư viện là trong

/usr/local/lib/libtesseract.a 

Và các tiêu đề đang ở:

/usr/local/include/tesseract 

Từ đó trở đi, một vấn đề của mình sử dụng nó trong dự án của bạn. Tôi đã thử nghiệm điều này trên OSX Yosemite 10.10.5 với công cụ pha và lệnh dòng lệnh.

+0

xin lỗi đã bỏ lỡ bản cập nhật. Kiểm tra ngay bây giờ! -> Làm việc quá nhanh, tôi vẫn có thể chỉnh sửa bình luận. Đó là câu trả lời đơn giản như thế nào. Cám ơn! Sửa tôi nếu tôi sai, nhưng các libs khác xây dựng như thế này cũng sẽ tạo ra một tệp .a và tiêu đề ở các vị trí được tìm thấy ở trên bên phải? –

+0

Hầu hết các thư viện Unix/Linux có xu hướng sử dụng các vị trí đó (hoặc/usr/lib và/usr/include) nhưng OSX thường hơi khác một chút. –

2

Đây là một câu hỏi lớn. Về phần này, tôi đã có một cuộc gặp gỡ gần đây với Xcode.

  • Làm cách nào để biên dịch/xây dựng mã c thành tệp .a?
  1. Bấm vào tên dự án Xcode Yourproj (nút gốc của cây trên LHS)
  2. Chọn mục tiêu Yourtarget trên phần MỤC TIÊU
  3. giai đoạn Bấm Build trên thanh trên
  4. cuộn xuống phần Liên kết
  5. thay đổi Mach-O Type thành `Thư viện tĩnh

Theo yêu cầu ngôn ngữ 'C', AFAIK này có thể được thay đổi một cách nhanh chóng:

  1. Từ quan điểm cuối cùng ở trên, di chuyển xuống cho Apple LLVM - phần Ngôn ngữ
  2. thay đổi C Language Dialect đến sự lựa chọn của bạn, nói GNU99
  3. Nếu cần chọn Compile Sources As: 'C'
  4. Scroll lên đến Packaging và chỉnh sửa Product Name để Yourtarget
  5. Sửa Executable Prefix-lib
  6. Sửa Executable Extension để .a

Bây giờ đầu ra nên trở thành một tập tin như libYourtarget.a

  • Làm thế nào để bạn tạo một dự án xcode rằng xây dựng một khuôn khổ dựa trên c mã?

YMMV, dựa trên ngôn ngữ bạn chọn. Tôi chưa sử dụng Swift. Chỉ cần thêm libYourtarget.a làm khung khác của Yournewproj. Cách thích hợp để làm điều này là

  1. Bấm vào tên dự án Xcode Yourproj (nút gốc của cây trên LHS)
  2. Bấm vào Build Phases trên thanh trên
  3. Hãy chắc chắn rằng một mục tiêu được chọn trên bên trái
  4. Bây giờ mở rộng Link Binary with Libraries và nhấp vào dấu cộng và sau đó Add Other nút
  5. Browse để tập libYourtarget.a của bạn và kích vào Open.

Điều này sẽ hiệu quả. Nếu không, hãy cố gắng loại bỏ các lỗi biên dịch vì nó là YMMV như đã đề cập.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn đã dành thời gian và sử dụng Xcode trong câu trả lời của bạn. Không có thời gian để kiểm tra nó. Sẽ kiểm tra điều này với một lib nguồn mở ngẫu nhiên tối nay! –

+0

@RMenke Tuyệt vời! Nếu bạn cần bất kỳ sự trợ giúp nào cho tôi biết. – mcku

+0

Thực ra tôi có. Thực sự chậm phát triển ở tất cả điều này. Tôi chỉ cần kéo và thả các tệp nguồn Tesseract vào một dự án Xcode trống và sau đó thiết lập nó như trong câu trả lời của bạn? Tôi không cần phải đặt tiêu đề cho công chúng? Chỉ cần sử dụng Tesseract làm ví dụ. Câu trả lời cụ thể nhất sẽ giúp tôi nhiều nhất. –