Actually, I think it's that ocamlbuild should be told to link libdai_stubs.a, and not try and build it. But also, I wanted to reference an existing work that links with C libraries, and I found ocamlbuild's example, with-c. I tried to build it, and I found that it isn't built by the harness default. Also, if you just try and build within just that raw directory in isolation, that it fails with a similar error I had been getting earlier. I looked around and found these: https://stackoverflow.com/questions/19644451/how-to-make-ocamlbuild-compile-and-link-a-c-file-into-an-ocaml-project https://l-lang.blogspot.com/2012/08/incorporating-c-code-in-ocaml-project.html https://ocaml.org/learn/tutorials/ocamlbuild/Using_an_external_library.html And I'm trying to follow, but they each give unique directions, each seem to not work for me. On Sat, Aug 26, 2017 at 9:12 PM, Kenneth Adam Miller < kennethadammiller@gmail.com> wrote: > Hello, > > > I'm building a pair of companion oasis build spec and opam package setup > for a C library. libdai I figured out how to get swig and oasis to build > most things I need, but I'm having trouble getting oasis to not generate > _stubs targets that aren't found. There is a static C/++ libdai.a file that > is the product of the project I'm trying to wrap. I can't convince oasis to > use that instead. Here's my _oasis target: > > > Library "dai" > Path: ./ > Install: false > Modules: Swig, Dai > CompiledObject: best > CSources: dai_wrap.cxx.c > CCOpt: -g -xc++ "-I../../include" > > > With a fresh clone of libdai, I get dai_wrap.cxx.c by doing the following > in ./swig after building libdai: > > $(SWIG) -ocaml -c++ dai.i > mv dai_wrap.cxx dai_wrap.cxx.c > sed -i -e 's/caml_array_length/caml_array_len/g' dai_wrap.cxx.c > > I got my swig and dai ml files by doing the following: > > swig2.0 -ocaml -co dai.ml > swig2.0 -ocaml -co swig.ml > swig2.0 -ocaml -co swig.mli > > I build by doing the following: > > ocaml setup.ml -configure > ocaml setup.ml -build > > > I get the following error: > > > Solver failed: > Ocamlbuild knows of no rules that apply to a target named > ./libdai_stubs.a. This can happen if you ask Ocamlbuild to build a target > with the wrong extension (e.g. .opt instead of .native) or if the source > files live in directories that have not been specified as include > directories. > Compilation unsuccessful after building 8 targets (8 cached) in 00:00:00. > E: Failure("Command ''/usr/bin/ocamlbuild' ./libdai_stubs.a > ./dlldai_stubs.so ./dai.cma ./dai.cmxa ./dai.a ./dai.cmxs -j 5 -tag debug' > terminated with error code 6") > > I want to make sure that the actual target shared library that was > produced by the libdai build file itself is linked against. But oasis is > assuming I have a _stubs target. I read in the documentation here that: "The > usual idiom is to append _stubs to the name." > https://ocaml.org/learn/tutorials/setting_up_with_ > oasis.html#Interfacing-with-C-code > > And I think that that is the source of the error, but it isn't well > explained. The ultimate things I originally wanted was to be able to use > libdai with both the utop or the bytecode interpreter and with fully > compiled targets. I was going to make libdai a library and then publicize > it. > > If anybody needs to replicate my issue, I have a docker container with > this already. >