Closed heatblazer closed 7 years ago
Looks like the compiler can't find the Qt includes directory (there is no -I/path/to/Qt/include
in the command).
My honest answer is that I have not tested this on Linux and the configure.py
script does not take any special measures for this platform (unlike Windows or Mac). If you look in configure.py
from line 44 onwards you will see how extra flags/paths etc. are added if you fancy fixing this yourself (pull requests gratefully received), otherwise I will spin up a Linux environment when I have time and have a go myself.
I have added the -I/<path to my Qt headers/include
but I still fail in the build. I was able to fix the SIP/C++ example in PyQt4 and I have to do this in PyQt5 but I'll try to figure out.
It would be great if you can provide a minimal example for a custom QWidget
minimal, with the simplest configure.py
script that just shows a hardcoded example, like the original in Riverbank, that can work in linux, I haven't been able to find anybody who is fighting this.
I've updated the configure script and this example now runs successfully on Ubuntu 16.04.
Great news! I will report tomorrow on Fedora builds.
Hello, I am still getting this error on Fedora and Ubuntu:
Entering directory '/home/ilian/git-projects/pyqtlibtest/PyMyLabel-master/modules'
g++ -c -std=c++11 -pipe -fPIC -O2 -Wall -W -DNDEBUG -DMYLABEL_LIBRARY -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -I. -I/home/ilian/git-projects/pyqtlibtest/PyMyLabel-master/src -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include/QtCore -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include/QtGui -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include/QtWidgets -I/home/ilian/git-projects/prosfitdesktop/include/python3.4m -I/usr/include/python3.4m -o sipPyMyLabelcmodule.o sipPyMyLabelcmodule.cpp
In file included from sipPyMyLabelcmodule.cpp:7:0:
sipAPIPyMyLabel.h:526:8: error: ‘sipImportedTypeDef’ does not name a type
extern sipImportedTypeDef sipImportedTypes_PyMyLabel_QtCore[];
^
sipAPIPyMyLabel.h:527:8: error: ‘sipImportedVirtErrorHandlerDef’ does not name a type
extern sipImportedVirtErrorHandlerDef sipImportedVirtErrorHandlers_PyMyLabel_Qt
^
sipAPIPyMyLabel.h:594:8: error: ‘sipImportedTypeDef’ does not name a type
extern sipImportedTypeDef sipImportedTypes_PyMyLabel_QtGui[];
^
sipAPIPyMyLabel.h:607:8: error: ‘sipImportedTypeDef’ does not name a type
extern sipImportedTypeDef sipImportedTypes_PyMyLabel_QtWidgets[];
^
/home/ilian/git-projects/pyqtlibtest/PyMyLabel-master/modules/sipPyMyLabelcmodule.cpp: In function ‘void sipVH_PyMyLabel_35(sip_gilstate_t, sipVirtErrorHandlerFunc, sipSimpleWrapper*, PyObject*, const QMetaMethod&)’:
sipAPIPyMyLabel.h:340:55: error: ‘const sipAPIDef {aka const struct _sipAPIDef}’ has no member named ‘api_call_procedure_method’
#define sipCallProcedureMethod sipAPI_PyMyLabel->api_call_procedure_method
^
/home/ilian/git-projects/pyqtlibtest/PyMyLabel-master/modules/sipPyMyLabelcmodule.cpp:249:5: note: in expansion of macro ‘sipCallProcedureMethod’
sipCallProcedureMethod(sipGILState, sipErrorHandler, sipPySelf, sipMethod,
^
That would suggest it can't find the SIP types... How have you built/installed Qt/SIP/PyQt? This has been tested (on MacOS/Linux) by using the Qt installer and then building SIP and PyQt5 from source.
Tough one, I am using a virtualenv
I have to check it out. What tool chain did you used when building SIP, PyQt and Qt? Something from requiremetns.txt
or the official guide?
I use virtualenv too, but I don't use SIP/PyQt5 wheels via pip.
Is sip.h
installed in either of these include directories:
/home/ilian/git-projects/prosfitdesktop/include/python3.4m
/usr/include/python3.4m
Yes, it's present in both directories.
Hmmm... the types that being reported as missing are defined in sip.h
that is imported into sipPyMyLabelcmodule.cpp
via sipAPIPyMyLabel.h
. The fact that sip.h
is in both directories may be causing a conflict...
You sure that I don't have to move the C++ .so
files from the Qt project (src) to /usr/lib
/usr/lib64
I had to do something similar for PyQt4
example from Riverbank.
Here is the makefile generated by configure.py
TARGET = PyMyLabel.so
OFILES = sipPyMyLabelcmodule.o sipPyMyLabelMyLabel.o
HFILES = sipAPIPyMyLabel.h
CC = gcc
CXX = g++
LINK = g++
CPPFLAGS = -DNDEBUG -DMYLABEL_LIBRARY -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -I. -I/home/ilian/git-projects/pyqtlibtest/PyMyLabel-master/src -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include/QtCore -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include/QtGui -I/home/ilian/opt/Qt5.7.1/5.7/gcc_64/include/QtWidgets -I/home/ilian/git-projects/prosfitdesktop/include/python3.4m -I/usr/include/python3.4m
CFLAGS = -pipe -fPIC -O2 -Wall -W
CXXFLAGS = -pipe -fPIC -O2 -Wall -W
LFLAGS = -shared -Wl,-rpath,/home/ilian/opt/Qt5.7.1/5.7/gcc_64/lib -Wl,--version-script=PyMyLabel.exp
LIBS = -L/home/ilian/opt/Qt5.7.1/5.7/gcc_64/lib -L../src -lMyLabel
.SUFFIXES: .c .o .cpp .cc .cxx .C
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
.C.o:
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
all: $(TARGET)
$(OFILES): $(HFILES)
$(TARGET): $(OFILES)
@echo '{ global: PyInit_PyMyLabel; local: *; };' > PyMyLabel.exp
$(LINK) $(LFLAGS) -o $(TARGET) $(OFILES) $(LIBS)
install: $(TARGET)
@test -d $(DESTDIR)PyMyLabel || mkdir -p $(DESTDIR)PyMyLabel
cp -f $(TARGET) $(DESTDIR)PyMyLabel/$(TARGET)
strip $(DESTDIR)PyMyLabel/$(TARGET)
clean:
-rm -f $(TARGET)
-rm -f sipPyMyLabelcmodule.o
-rm -f sipPyMyLabelMyLabel.o
-rm -f PyMyLabel.exp
No need to move .so
files yet, you're still compiling not linking.
Makefile
looks good. I really think the issue is here is with the configuration/location (and possible duplication) of dependencies.
I just spun up a Fedora VM and everything worked fine:
Additionally I had to install some dependencies before installing PyQt5:
sudo dnf install libGL-devel mesa-libGL-devel python3-devel
Just to ask, how did you install PyQt and SIP?
As described in my previous comment, I got the source tarballs from Riverbank and built them using a virtualenv.
Hello, I am on linux Python3.4, I am getting the following error: