Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fails on 32-bit with unclear error message #151

Open
mgravell opened this issue Oct 11, 2023 · 5 comments
Open

Fails on 32-bit with unclear error message #151

mgravell opened this issue Oct 11, 2023 · 5 comments

Comments

@mgravell
Copy link

mgravell commented Oct 11, 2023

On .NET Framework, the default target architecture (unless specified explicitly) is "any", IIRC - and will default to x86; the package doesn't have x86 binaries (only x64), so on 32-bit it fails with Unable to load DLL 'duckdb'

Maybe add a 64-bit check, and/or explicitly specify the target architecture?


original report:

I see that there's a netstandard2.0 package in the nuget, but: it doesn't seem to work; it doesn't work in the tests here, and doesn't work in standalone packages either.

If it isn't expected to work on netfx, it might be worth simply dropping the netstandard2.0 target - but this might just be a packaging snafu

test setup example:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net472</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <LangVersion>12</LangVersion>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="DuckDB.NET.Data.Full" Version="0.9.0.3"/>
    </ItemGroup>
</Project>

with:

using DuckDB.NET.Data;

using var conn = new DuckDBConnection("Data Source=:memory:");
conn.Open();

gives:

Unhandled Exception: System.DllNotFoundException: Unable to load DLL 'duckdb': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at DuckDB.NET.NativeMethods.Startup.DuckDBOpen(String path, DuckDBDatabase& database, DuckDBConfig config, IntPtr& error)
   at DuckDB.NET.Data.Internal.ConnectionManager.GetConnectionReference(DuckDBConnectionString connectionString)
   at DuckDB.NET.Data.DuckDBConnection.Open()
   at Program.<Main>$(String[] args) in C:\Code\ConsoleApp7\ConsoleApp7\Program.cs:line 4
@mgravell mgravell changed the title Packaging fails on .NET framwork despite netstandard target Packaging fails on .NET framework despite netstandard target Oct 11, 2023
@mgravell
Copy link
Author

ah, I understand - editing hugely...

@mgravell mgravell changed the title Packaging fails on .NET framework despite netstandard target Fails on 32-bit with unclear error message Oct 11, 2023
@Giorgi
Copy link
Owner

Giorgi commented Oct 11, 2023

When PlatformTarget is AnyCpu or x86 the process is still 64-bit but duckdb.dll doesn't get copied to the output folder so I think adding a Environment.Is64BitProcess won't help at runtime.

image

@mgravell
Copy link
Author

mgravell commented Oct 11, 2023

Suggestion: if the library has <PlatformTarget>x64</PlatformTarget>, it can't be referenced from an incompatible project - it gives an error message about the mismatch (although that might have problems for linux ARM)

@Giorgi
Copy link
Owner

Giorgi commented Oct 11, 2023

Ah I didn't know that. For Linux Arm, there is only a 64bit native binary so will it be a problem?

@mgravell
Copy link
Author

I don't know, honestly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants