-
Notifications
You must be signed in to change notification settings - Fork 1
bennoleslie/haskell-shared-example
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This is a sample project that is used to demonstrate how to create a
shared library in Haskell that can be called from other programs.
E.g: python using ctypes, or C using dlopen.
This is currently tested and working with OS X Snow Leopard with 7.4.2
running Haskell Platform 2012.4.0.0 64-bit.
To use:
$ sh build-test.sh 1
$ python test.py
build-test.sh contains a number of potential ways in which you could compile
a shared library (currently method '1' works correctly).
test.py uses ctypes to import and call the functions in the haskell shared library.
Test.hs contains some example functions.
Historical tests:
Previously there were problems on earlier version of the Haskell platform.
These experiments are documented below.
Tests:
1) OS X Snow Leopard GHC 7.0.4 from Haskell Platform 2011.4.0.0 64 bit
Build method #1:
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking Test.so ...
Undefined symbols:
"_environ", referenced from:
___hscore_environ in libHSbase-4.3.1.0.a(PrelIOUtils.o)
(maybe you meant: ___hscore_environ)
ld: symbol(s) not found
collect2: ld returned 1 exit status
Build method #2:
Implicit import declaration:
Could not find module `Prelude':
Perhaps you haven't installed the "dyn" libraries for package `base'?
Use -v to see a list of the files searched for.
Build method #3:
Implicit import declaration:
Could not find module `Prelude':
Perhaps you haven't installed the "dyn" libraries for package `base'?
Use -v to see a list of the files searched for.
Build method #4:
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking libTest.so ...
ld: pointer in read-only segment not allowed in slidable image, used in ___gmpn_modexact_1c_odd from /usr/local/lib/ghc-7.0.4/integer-gmp-0.2.0.3/libHSinteger-gmp-0.2.0.3.a(mode1o.o)
collect2: ld returned 1 exit status
Build method #5:
Implicit import declaration:
Could not find module `Prelude':
Perhaps you haven't installed the "dyn" libraries for package `base'?
Use -v to see a list of the files searched for.
Build method #6:
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking libTest.so ...
ld: pointer in read-only segment not allowed in slidable image, used in ___gmpn_modexact_1c_odd from /usr/local/lib/ghc-7.0.4/integer-gmp-0.2.0.3/libHSinteger-gmp-0.2.0.3.a(mode1o.o)
collect2: ld returned 1 exit status
2) OS X Snow Leopard GHC 7.0.4 from Haskell Platform 2011.4.0.0 32 bit
Build method #1:
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking Test.so ...
Undefined symbols:
"_environ", referenced from:
_environ$non_lazy_ptr in libHSbase-4.3.1.0.a(PrelIOUtils.o)
(maybe you meant: ___hscore_environ, _environ$non_lazy_ptr )
ld: symbol(s) not found
collect2: ld returned 1 exit status
Build method #2:
benno@ff:~/haskell-shared-example% sh build-test.sh 2
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking Test.so ...
ld: unknown option: -optc
collect2: ld returned 1 exit status
Build method #3:
benno@ff:~/haskell-shared-example% sh build-test.sh 3
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking libTest.so ...
Success! in linking:
But, load time error:
Library not loaded: /usr/local/lib/ghc-7.0.4/base-4.3.1.0/libHSbase-4.3.1.0-ghc7.0.4.dylib
Build method #4:
Success in linking, but loading error:
OSError: dlopen(./libTest.so, 6): Symbol not found: _alloc_blocks_lim
Referenced from: /Volumes/BigDisk/Users/benno/haskell-shared-example/libTest.so
Expected in: flat namespace
Build method #5:
Success in linking, but loading error:
OSError: dlopen(./libTest.so, 6): Library not loaded: /usr/local/lib/ghc-7.0.4/base-4.3.1.0/libHSbase-4.3.1.0-ghc7.0.4.dylib
Referenced from: /Volumes/BigDisk/Users/benno/haskell-shared-example/libTest.so
Reason: image not found
Build method #6:
benno@ff:~/haskell-shared-example% sh build-test.sh 6
[1 of 1] Compiling Test ( Test.hs, Test.o )
Linking libTest.so ...
benno@ff:~/haskell-shared-example% arch -i386 /usr/bin/python2.6 test.py
<CDLL './libTest.so', handle 20a570 at 1f0090>
<_FuncPtr object at 0x1d3af8>
About
Example Haskell shared library boiler plate
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published