W porządku, mam naprawdę niepokojące pytanie CUDA 5.0 o tym, jak poprawnie łączyć rzeczy. Byłbym wdzięczny za wszelką pomoc!Jak połączyć kod hosta ze statyczną biblioteką CUDA po rozłączeniu kompilacji?
Korzystając z oddzielnych funkcji kompilacji CUDA 5.0, wygenerowałem bibliotekę statyczną (* .a). To ładnie łączy się z innymi plikami * .cu po uruchomieniu przez nvcc, zrobiłem to wiele razy.
Chciałbym teraz pobrać plik * .cpp i połączyć go z kodem hosta w tej bibliotece statycznej za pomocą g ++ lub cokolwiek innego, ale nie nvcc. Jeśli będę próbować tego, otrzymuję błędy kompilatora jak
nieokreślonej odniesieniu do __cudaRegisterLinkedBinary
używam zarówno -lcuda
i -lcudart
i, o ile mi wiadomo, ma bibliotek w odpowiedniej kolejności (czyli -lmylib -lcuda -lcudart
). Nie sądzę, że to jest problem. Może się mylę, ale czuję, że brakuje mi kroku i że muszę zrobić coś innego w mojej statycznej bibliotece (łączenie urządzeń?), Zanim będę mógł go użyć z g ++.
Czy przeoczyłem coś istotnego? Czy to możliwe?
Dodatkowe pytanie: chcę, aby wynik końcowy był biblioteką dynamiczną. Jak mogę to osiągnąć?
add '-lcudadevrt' –
Ja już próbowałem tego, że nie zrobił Nic nie rób. Rzeczywiste polecenie, którego używam, to: g ++ -pthread -shared -Wl, -O1-Wl, -Bymboliczne funkcje -Wl, -Bsymboliczne-funkcje -Wl, -z, relro mycpplib.o mycudalib.a -L/usr/local/cuda-5.0/lib64 -L/usr/local/cuda-5.0/lib -lmystaticlib -lcuda -lcudart -lcudadevrt -o mylinkedlib.so - Próbuję stworzyć moduł Pythona dla mojej biblioteki CUDA. – user2333829
Błąd związany z niezdefiniowanym __cudaRegisterLinkedBinary faktycznie występuje, gdy próbuję zaimportować moduł Python. g ++ faktycznie kompiluje wszystko bez narzekania. – user2333829