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