How do you use gcc's ar utility with ocaml's compiler?
I can create a static library with ocaml object files using
ar rc ./lib/libprog.a ./_build/*.cmo
And I can display the contents of the libprog.a using
ar t ./lib/libprog.a
but I can't find any documentation that explains how to use this static library with ocaml's compilers.
Could someone please post an example(or provide a link) which demonstrates how to use a libprog.a file with ocaml's compilers. Please no examples with ocaml build utilities because I want to see how its done at the command line using ocaml's compilers. Thanks.
ocaml
add a comment |
I can create a static library with ocaml object files using
ar rc ./lib/libprog.a ./_build/*.cmo
And I can display the contents of the libprog.a using
ar t ./lib/libprog.a
but I can't find any documentation that explains how to use this static library with ocaml's compilers.
Could someone please post an example(or provide a link) which demonstrates how to use a libprog.a file with ocaml's compilers. Please no examples with ocaml build utilities because I want to see how its done at the command line using ocaml's compilers. Thanks.
ocaml
add a comment |
I can create a static library with ocaml object files using
ar rc ./lib/libprog.a ./_build/*.cmo
And I can display the contents of the libprog.a using
ar t ./lib/libprog.a
but I can't find any documentation that explains how to use this static library with ocaml's compilers.
Could someone please post an example(or provide a link) which demonstrates how to use a libprog.a file with ocaml's compilers. Please no examples with ocaml build utilities because I want to see how its done at the command line using ocaml's compilers. Thanks.
ocaml
I can create a static library with ocaml object files using
ar rc ./lib/libprog.a ./_build/*.cmo
And I can display the contents of the libprog.a using
ar t ./lib/libprog.a
but I can't find any documentation that explains how to use this static library with ocaml's compilers.
Could someone please post an example(or provide a link) which demonstrates how to use a libprog.a file with ocaml's compilers. Please no examples with ocaml build utilities because I want to see how its done at the command line using ocaml's compilers. Thanks.
ocaml
ocaml
asked Nov 25 '18 at 20:26
G4143G4143
475617
475617
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
OCaml wants to use its own archive format.
$ cat a.ml
let x = 14
$ cat b.ml
let y = 17
$ cat main.ml
let () = Printf.printf "%dn" (A.x + B.y)
$ ocamlc -c a.ml
$ ocamlc -c b.ml
$ ocamlc -a -o oclibab.cma a.cmo b.cmo
Now there is an OCaml archive (.cma file) named oclibab.cma that contains the modules A and B:
$ ocamlobjinfo oclibab.cma
File oclibab.cma
Force custom: no
Extra C object files:
Extra C options:
Extra dynamically-loaded libraries:
Unit name: A
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
b162d96cf09fcde9d245f96359c9178a A
Required globals:
Uses unsafe features: no
Force link: no
Unit name: B
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
bc583fd68fc2b0a4e44e3e640983c8dd B
Required globals:
Uses unsafe features: no
Force link: no
Note that this archive format contains digital signatures for the interfaces. This allows stronger checking at link time than is generally available through the stock toolchain of the OS (like ar).
$ ocamlc -o main oclibab.cma main.ml
$ ./main
31
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
1
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53471600%2fhow-do-you-use-gccs-ar-utility-with-ocamls-compiler%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
OCaml wants to use its own archive format.
$ cat a.ml
let x = 14
$ cat b.ml
let y = 17
$ cat main.ml
let () = Printf.printf "%dn" (A.x + B.y)
$ ocamlc -c a.ml
$ ocamlc -c b.ml
$ ocamlc -a -o oclibab.cma a.cmo b.cmo
Now there is an OCaml archive (.cma file) named oclibab.cma that contains the modules A and B:
$ ocamlobjinfo oclibab.cma
File oclibab.cma
Force custom: no
Extra C object files:
Extra C options:
Extra dynamically-loaded libraries:
Unit name: A
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
b162d96cf09fcde9d245f96359c9178a A
Required globals:
Uses unsafe features: no
Force link: no
Unit name: B
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
bc583fd68fc2b0a4e44e3e640983c8dd B
Required globals:
Uses unsafe features: no
Force link: no
Note that this archive format contains digital signatures for the interfaces. This allows stronger checking at link time than is generally available through the stock toolchain of the OS (like ar).
$ ocamlc -o main oclibab.cma main.ml
$ ./main
31
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
1
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
add a comment |
OCaml wants to use its own archive format.
$ cat a.ml
let x = 14
$ cat b.ml
let y = 17
$ cat main.ml
let () = Printf.printf "%dn" (A.x + B.y)
$ ocamlc -c a.ml
$ ocamlc -c b.ml
$ ocamlc -a -o oclibab.cma a.cmo b.cmo
Now there is an OCaml archive (.cma file) named oclibab.cma that contains the modules A and B:
$ ocamlobjinfo oclibab.cma
File oclibab.cma
Force custom: no
Extra C object files:
Extra C options:
Extra dynamically-loaded libraries:
Unit name: A
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
b162d96cf09fcde9d245f96359c9178a A
Required globals:
Uses unsafe features: no
Force link: no
Unit name: B
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
bc583fd68fc2b0a4e44e3e640983c8dd B
Required globals:
Uses unsafe features: no
Force link: no
Note that this archive format contains digital signatures for the interfaces. This allows stronger checking at link time than is generally available through the stock toolchain of the OS (like ar).
$ ocamlc -o main oclibab.cma main.ml
$ ./main
31
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
1
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
add a comment |
OCaml wants to use its own archive format.
$ cat a.ml
let x = 14
$ cat b.ml
let y = 17
$ cat main.ml
let () = Printf.printf "%dn" (A.x + B.y)
$ ocamlc -c a.ml
$ ocamlc -c b.ml
$ ocamlc -a -o oclibab.cma a.cmo b.cmo
Now there is an OCaml archive (.cma file) named oclibab.cma that contains the modules A and B:
$ ocamlobjinfo oclibab.cma
File oclibab.cma
Force custom: no
Extra C object files:
Extra C options:
Extra dynamically-loaded libraries:
Unit name: A
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
b162d96cf09fcde9d245f96359c9178a A
Required globals:
Uses unsafe features: no
Force link: no
Unit name: B
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
bc583fd68fc2b0a4e44e3e640983c8dd B
Required globals:
Uses unsafe features: no
Force link: no
Note that this archive format contains digital signatures for the interfaces. This allows stronger checking at link time than is generally available through the stock toolchain of the OS (like ar).
$ ocamlc -o main oclibab.cma main.ml
$ ./main
31
OCaml wants to use its own archive format.
$ cat a.ml
let x = 14
$ cat b.ml
let y = 17
$ cat main.ml
let () = Printf.printf "%dn" (A.x + B.y)
$ ocamlc -c a.ml
$ ocamlc -c b.ml
$ ocamlc -a -o oclibab.cma a.cmo b.cmo
Now there is an OCaml archive (.cma file) named oclibab.cma that contains the modules A and B:
$ ocamlobjinfo oclibab.cma
File oclibab.cma
Force custom: no
Extra C object files:
Extra C options:
Extra dynamically-loaded libraries:
Unit name: A
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
b162d96cf09fcde9d245f96359c9178a A
Required globals:
Uses unsafe features: no
Force link: no
Unit name: B
Interfaces imported:
9b04ecdc97e5102c1d342892ef7ad9a2 Pervasives
79ae8c0eb753af6b441fe05456c7970b CamlinternalFormatBasics
bc583fd68fc2b0a4e44e3e640983c8dd B
Required globals:
Uses unsafe features: no
Force link: no
Note that this archive format contains digital signatures for the interfaces. This allows stronger checking at link time than is generally available through the stock toolchain of the OS (like ar).
$ ocamlc -o main oclibab.cma main.ml
$ ./main
31
edited Nov 25 '18 at 20:54
answered Nov 25 '18 at 20:48
Jeffrey ScofieldJeffrey Scofield
48.5k24979
48.5k24979
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
1
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
add a comment |
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
1
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
So all the *.a files that are included with Ocaml are C files? Example unix.a.
– G4143
Nov 25 '18 at 21:06
1
1
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
If you make an archive of bytecode (.cmo) files, ocamlc makes a .cma file. If you make an archive of native (.cmx) files, ocamlopt makes a .cmxa file and a .a file. So not all .a files are from .c sources. Some of them are, most likely.
– Jeffrey Scofield
Nov 25 '18 at 21:18
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53471600%2fhow-do-you-use-gccs-ar-utility-with-ocamls-compiler%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown