Mono interop: Loading 32bit shared library does not work on my 64bit system

后端 未结 3 817
遇见更好的自我
遇见更好的自我 2021-01-06 16:47

i have a problem running a simple interop example on my system. I built a simple 32-bit shared library called libtest.so (c++)

g++ -c -fpic test.cpp -m32
g++         


        
相关标签:
3条回答
  • 2021-01-06 17:28

    Is there a possibility to load 32-bit shared libraries on a 64-bit system?

    Yes, but only if you compile the program that uses said shared libraries into a 32-bit process.

    Well i guess mono runs my program in 64-bit mode and therefore it cannot call a 32-bit shared library? If i build the shared library in 64 bit mode (without -m32) everything works fine!!

    Of course this happen. Just compile the program with the m32 flag and you should have no problems.

    0 讨论(0)
  • 2021-01-06 17:38

    The problem is that you have a 64bit version of Mono installed on your system which can only P/Invoke into 64bit native libraries, it cannot P/Invoke into 32bit native libraries.

    The -platform:x86 flag is meant for the C# compiler, not the runtime, and does not hint to the runtime to use a 32bit memory space.

    You need to install the 32bit version of Mono on your Ubuntu system if you want to P/Invoke into 32bit native libraries.

    0 讨论(0)
  • 2021-01-06 17:40

    You cannot load a 32 bit module into a 64 bit process. Either run a 32 bit process, or compile your native module as a 64 bit module.

    0 讨论(0)
提交回复
热议问题