Closed hesselink closed 9 years ago
Cc: @joelteon, @copumpkin
I found this, but it doesn't have much information: http://www.fatvat.co.uk/2010/10/duplicate-symbol-myinetntoa-when.html
Judging by HsNet.h, it looks like all the symbols in question have an INLINE
CPP macro in front of them, and thus aren't really intended to show up as symbols at all (since their implementation is in a header file!)
If I were to guess, that INLINE
isn't expanding properly and is causing any files to import HsNet.h to define the function, causing the duplicate symbol error.
The relevant code:
#ifndef INLINE
# if defined(_MSC_VER)
# define INLINE extern __inline
# elif defined(__GNUC__)
# define INLINE extern inline
# else
# define INLINE inline
# endif
#endif
which doesn't seem unreasonable. Perhaps INLINE
comes defined (to some nonsense) from somewhere else?
IMHO, that codes uses inline
incorrectly. If the keyword is supposed to suppress the generation of a linker symbol, then static
(or even static inline
) would be the right choice. In C++ code, the inline
keyword would have the effect of generating a weak symbol that doesn't cause duplicate definitions, but in C that is not the case, as far as I know. (In fact, I don't believe that C even had inline
at all prior to C99.)
@hesselink, just out of curiosity: why do you build cabal-install-bundle
instead of the normal cabal-install
?
I was trying out the setup mentioned on this haskell reddit post. I just tried replacing it with cabal-install
and that seems to have worked, and it even got me 1.22 instead of 1.18. So my problem is solved, feel free to close this bug if it's no longer relevant.
If someone wants to investigate this issue further, please feel free to re-open!
I'm on Mac OS X 10.9.5, on the nixos-unstable channel with nix installed via the curl command here. I'm trying to install a haskell environment, using the following nix expression in config.nix:
I issue the following command:
This fails installing
cabal-install-bundle
with the errorFull output below: