Difference between revisions of "Using C libraries for a D program"
(need a real target name for PROG) |
m (Category:HowTo) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 9: | Line 9: | ||
::'''/usr/local/lib/libbu.so''' | ::'''/usr/local/lib/libbu.so''' | ||
− | * a D language binding | + | * a D language binding interface file to the C library API headers: |
::'''/usr/local/include/bu.d''' | ::'''/usr/local/include/bu.d''' | ||
Line 28: | Line 28: | ||
$(PROG): main.o bu.o | $(PROG): main.o bu.o | ||
− | $(DMD) - | + | $(DMD) -of$@ main.o bu.o -L$(LIBDIR) -lbu |
%.o: %.d | %.o: %.d | ||
− | $(DMD) -c $< - | + | $(DMD) -c $< -of$@ |
bu.o: $(BINDING) | bu.o: $(BINDING) | ||
− | $(DMD) -c $< - | + | $(DMD) -c $< -of$@ |
clean: | clean: | ||
− | + | rm $(PROG) *.o</pre> | |
Then we can build '''test-bu''' by executing: | Then we can build '''test-bu''' by executing: | ||
Line 45: | Line 45: | ||
The GNU Makefile can be made more general and efficient, but it should produce the desired binary program. | The GNU Makefile can be made more general and efficient, but it should produce the desired binary program. | ||
− | Note also that a fully D-supporting C library installation would probably have the D binding | + | Note also that a fully D-supporting C library installation would probably have the D binding interface available as a pre-compiled *.o file. |
+ | |||
+ | [[Category:HowTo]] |
Latest revision as of 02:02, 3 December 2019
WARNING: This crude recipe by an absolute D newbie has not yet been tested--corrections are welcome!
Assume one has the following, error-free files:
- a D language source program:
- ./main.d
- a C ABI shared library file:
- /usr/local/lib/libbu.so
- a D language binding interface file to the C library API headers:
- /usr/local/include/bu.d
We first create a GNU Makefile to build program test-bu using those three files (note the leading spaces on lines following targets must be tabs in a real GNU Makefile):
$ cat Makefile # use the dmd compiler DMD = /usr/bin/dmd LIBDIR = /usr/local/brlcad/lib MODDIR = /usr/local/brlcad/include BINDING = $(MODDIR)/bu.d PROG = test-bu all: $(PROG) $(PROG): main.o bu.o $(DMD) -of$@ main.o bu.o -L$(LIBDIR) -lbu %.o: %.d $(DMD) -c $< -of$@ bu.o: $(BINDING) $(DMD) -c $< -of$@ clean: rm $(PROG) *.o
Then we can build test-bu by executing:
$ make test-bu
The GNU Makefile can be made more general and efficient, but it should produce the desired binary program.
Note also that a fully D-supporting C library installation would probably have the D binding interface available as a pre-compiled *.o file.