ImportC in a Dub project

Steven Schveighoffer schveiguy at gmail.com
Fri Oct 28 19:08:47 UTC 2022


On 10/28/22 2:43 PM, Carsten Schlote wrote:
> On Friday, 28 October 2022 at 18:31:25 UTC, Steven Schveighoffer wrote:
> 
>> Are you passing the c file to the compiler? Also, you must be using 
>> dmd for ImportC currently.
>>
>> What is your build line?
> 
> ```
> $ cat dub.json
> {
>      "authors": [
>          "Carsten Schlote"
>      ],
>      "copyright": "Copyright © 2022, Carsten Schlote",
>      "description": "A minimal D application.",
>      "license": "proprietary",
>      "name": "importc-app",
>      "lflags": [ "-lzstd", "zstd_binding.o" ],
>      "preBuildCommands": [ "gcc -g -O0 -c -o zstd_binding.o 
> source/zstd_binding.c"]
> ```
> 
> ```
> $ dub build --compiler=dmd-beta -v
> Using dub registry url 'https://code.dlang.org/'
> Refreshing local packages (refresh existing: true)...
> Looking for local package map at /var/lib/dub/packages/local-packages.json
> Looking for local package map at 
> /home/cschlote/.dub/packages/local-packages.json
> Looking for local package map at 
> /home2/cschlote/build/dlang/importc-tests/dubbed/.dub/packages/local-packages.json
> Note: Failed to determine version of package importc-app at .. Assuming 
> ~master.
> Refreshing local packages (refresh existing: false)...
> Looking for local package map at /var/lib/dub/packages/local-packages.json
> Looking for local package map at 
> /home/cschlote/.dub/packages/local-packages.json
> Looking for local package map at 
> /home2/cschlote/build/dlang/importc-tests/dubbed/.dub/packages/local-packages.json
> Refreshing local packages (refresh existing: false)...
> Looking for local package map at /var/lib/dub/packages/local-packages.json
> Looking for local package map at 
> /home/cschlote/.dub/packages/local-packages.json
> Looking for local package map at 
> /home2/cschlote/build/dlang/importc-tests/dubbed/.dub/packages/local-packages.json
> Generating using build
> Configuring dependent importc-app, deps:
> Performing "debug" build using dmd-beta for x86_64.
> Target 
> '/home2/cschlote/build/dlang/importc-tests/dubbed/.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-36-ga2865d74fb-9DB8925B9A720899BDD003C68BC85F85/importc-app' doesn't exist, need rebuild.
> importc-app ~master: building configuration "application"...
> Running pre-build commands...
> Running gcc -g -O0 -c -o zstd_binding.o source/zstd_binding.c
> dmd-beta -c 
> -of.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-36-ga2865d74fb-9DB8925B9A720899BDD003C68BC85F85/importc-app.o -debug -g -w -version=Have_importc_app -Isource/ source/app.d -vcolumns
> Linking...
> dmd-beta 
> -of.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-36-ga2865d74fb-9DB8925B9A720899BDD003C68BC85F85/importc-app .dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-36-ga2865d74fb-9DB8925B9A720899BDD003C68BC85F85/importc-app.o -L--no-as-needed -L-lzstd -Lzstd_binding.o -g
> Copying target from 
> /home2/cschlote/build/dlang/importc-tests/dubbed/.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-36-ga2865d74fb-9DB8925B9A720899BDD003C68BC85F85/importc-app to /home2/cschlote/build/dlang/importc-tests/dubbed
> ```
> 
> Without the ```preBuildCommands``` and without passing the resulting 
> object file to the linker, the ```relatedCode()``` doesn't exist. And 
> linking is failing.
> 

By default dub does not build C files (as evidenced by your command 
line). It may not even let you I don't know, but try:

```json
   "sourceFiles" : ["source/zstdc_binding.c"]
```

-Steve


More information about the Digitalmars-d-learn mailing list