"multiple definition" error
tommasobilli opened this issue · 8 comments
Hi, I'm trying to install charm on Debian, but build is failing with a multiple definition error. Here is the ouput I'm getting:
- Run
./configure.sh
Install prefix /usr/local
data directory /usr/local/share/charm
binary directory /usr/local/bin
library directory /usr/local/lib
config directory /usr/local/etc
Source path /home/tom/charm
CFLAGS -O2 -g
CHARM_CFLAGS -m64 -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fstack-protector-all -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits
LDFLAGS -m64
make make
python /usr/bin/python3
python-config /usr/bin/python3-config
build_ext options build_ext
install install
host CPU x86_64
wget /usr/bin/wget
gprof enabled no
profiler no
static build no
-Werror enabled no
integer module yes
ecc module yes
pairing module yes
disable benchmark no
libm found yes
libgmp found yes
libpbc found yes
libcrypto found yes
Documentation no
- Run
make install
/usr/bin/python3 setup.py install
Platform: Linux
Config file: /home/tom/charm/config.mk
running install
running bdist_egg
running egg_info
creating Charm_Crypto.egg-info
writing Charm_Crypto.egg-info/PKG-INFO
writing dependency_links to Charm_Crypto.egg-info/dependency_links.txt
writing requirements to Charm_Crypto.egg-info/requires.txt
writing top-level names to Charm_Crypto.egg-info/top_level.txt
writing manifest file 'Charm_Crypto.egg-info/SOURCES.txt'
package init file 'charm/schemes/prenc/__init__.py' not found (or not a regular file)
reading manifest file 'Charm_Crypto.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching 'README'
writing manifest file 'Charm_Crypto.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
copying charm/config.py -> build/lib.linux-x86_64-3.8/charm
running build_ext
building 'charm.core.math.pairing' extension
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DBENCHMARK_ENABLED=1 -Icharm/core/utilities/ -Icharm/core/benchmark/ -I/usr/include/python3.8 -c charm/core/math/pairing/pairingmodule.c -o build/temp.linux-x86_64-3.8/charm/core/math/pairing/pairingmodule.o
charm/core/math/pairing/pairingmodule.c: In function ‘hash2_element_to_bytes’:
charm/core/math/pairing/pairingmodule.c:473:15: warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]
473 | for(i = 0; i < last_buflen; i++)
| ^
charm/core/math/pairing/pairingmodule.c:477:25: warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]
477 | for(i = last_buflen; i < (last_buflen + buf_len); i++)
| ^
In file included from charm/core/math/pairing/pairingmodule.c:1789:
charm/core/benchmark/benchmark_util.c: In function ‘InitBenchmark’:
charm/core/benchmark/benchmark_util.c:172:3: warning: ‘RAND_pseudo_bytes’ is deprecated [-Wdeprecated-declarations]
172 | RAND_pseudo_bytes(group->bench_id, ID_LEN);
| ^~~~~~~~~~~~~~~~~
In file included from /usr/include/openssl/e_os2.h:13,
from /usr/include/openssl/bio.h:13,
from /usr/include/openssl/objects.h:14,
from charm/core/math/pairing/pairingmodule.h:44,
from charm/core/math/pairing/pairingmodule.c:30:
/usr/include/openssl/rand.h:44:1: note: declared here
44 | DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num))
| ^~~~~~~~~~~~~~~~~~
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DBENCHMARK_ENABLED=1 -Icharm/core/utilities/ -Icharm/core/benchmark/ -I/usr/include/python3.8 -c charm/core/utilities/base64.c -o build/temp.linux-x86_64-3.8/charm/core/utilities/base64.o
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DBENCHMARK_ENABLED=1 -Icharm/core/utilities/ -Icharm/core/benchmark/ -I/usr/include/python3.8 -c charm/core/benchmark/benchmarkmodule.c -o build/temp.linux-x86_64-3.8/charm/core/benchmark/benchmarkmodule.o
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -Wl,-z,relro -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.8/charm/core/math/pairing/pairingmodule.o build/temp.linux-x86_64-3.8/charm/core/utilities/base64.o build/temp.linux-x86_64-3.8/charm/core/benchmark/benchmarkmodule.o -lpbc -lgmp -lcrypto -o build/lib.linux-x86_64-3.8/charm/core/math/pairing.cpython-38-x86_64-linux-gnu.so
/usr/bin/ld: build/temp.linux-x86_64-3.8/charm/core/benchmark/benchmarkmodule.o:/home/tom/charm/charm/core/benchmark/benchmarkmodule.h:60: multiple definition of `BenchmarkError'; build/temp.linux-x86_64-3.8/charm/core/math/pairing/pairingmodule.o:/home/tom/charm/charm/core/benchmark/benchmarkmodule.h:60: first defined here
/usr/bin/ld: build/temp.linux-x86_64-3.8/charm/core/benchmark/benchmarkmodule.o:/home/tom/charm/charm/core/benchmark/benchmarkmodule.h:58: multiple definition of `BenchmarkType'; build/temp.linux-x86_64-3.8/charm/core/math/pairing/pairingmodule.o:/home/tom/charm/charm/core/benchmark/benchmarkmodule.h:58: first defined here
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
make: *** [Makefile:43: install] Error 1
Same issues. Does anyone knows a resolve?
Having the same issue, can not build successfully
Also have this issue.
Having the same issue, can not build successfully
I replaced the affected lines in benchmark_module.h
with
#ifndef BENCHMARK_MODULE
// define new benchmark type for benchmark module
extern PyTypeObject BenchmarkType;
// define new benchmark error type (will be used for notifying errors)
extern PyObject *BenchmarkError;
#else
// define new benchmark type for benchmark module
PyTypeObject BenchmarkType;
// define new benchmark error type (will be used for notifying errors)
PyObject *BenchmarkError;
#endif
to conditionally compile the types only for the right source file, and this particular problem went away.
However, I hit #239 and could not go further.
Edited: delete 'extern' in modifition of 'benchmark_module.c'.
Hey guys, I have just found the solution. Just as @dfaranha said, replace the affected lines(about 56 to 60) in benchmark_module.h
with:
#ifndef BENCHMARK_MODULE
// define new benchmark type for benchmark module
extern PyTypeObject BenchmarkType;
// define new benchmark error type (will be used for notifying errors)
extern PyObject *BenchmarkError;
#else
// define new benchmark type for benchmark module
PyTypeObject BenchmarkType;
// define new benchmark error type (will be used for notifying errors)
PyObject *BenchmarkError;
#endif
But you should also modify the benchmark_module.c
after include the head file:
#add after include
#ifndef BENCHMARK_MODULE
// define new benchmark type for benchmark module
PyTypeObject BenchmarkType;
// define new benchmark error type (will be used for notifying errors)
PyObject *BenchmarkError;
#endif
And you'll solve this.
@fremakvi can you pls submit a PR?
I hit #239 when I was trying to install charm in conda base environment in this way. But when I create a new environment for charm, I installed it successfully. I'm still confused about this error.