Cygwin GCC dodanie lokalizacji plików *.o

0

Mam taki problem, że muszę dodać przy linkowaniu kilka plików *.a i kilka plików *.o, jednak jedne i drugie nie należą do mojego kodu, tylko są zewnętrzne, a więc w przypadku *.a dałem opcję przy linkowaniu -Lsciezka i dla *.a to działa. Natomiast dla *.o nie chodzi, nie widzi tych plików. Nie mogę jednocześnie podawać pełnej ścieżki za każdym razem (nie wdawajmy się w szczegóły dlaczego, bo to akurat wykracza poza to pytanie).

Moje pytanie sprowadza się w takim razie do tego, jak dołączyć katalog, w którym następowałoby przeszukiwanie w przypadku plików *.o, a nie tylko *.a

0

pliki .o to nie biblioteki, musisz je podać na liście plików do zlinkowania. Nie bardzo rozumiem czemu nie dodasz po prostu "scieżka/*.o" i tyle

0

Tak, to wiem jaka jest różnica *.o i *.a, ale na linuksie przeszło mi normalnie jak było -L to normalnie dodało też *.o, a na cygwin tego nie zrobiło i mam spory problem logiczny.

Otóż, nie mogę dodać ręcznie, bo nie ja to dodaje, tylko automat, bo to nie jest normalnie gcc tylko cross dla innej platformy. binutils też dla innej platformy. W efekcie przy binutils ld dodaje niektóre pliki *.o automatycznie i ja nie mam bezpośredniego wpływu na ścieżkę. Ścieżkę mogę tylko zmienić pośrednio grzebiąc w skryptach konfiguracji, ale to już jest MEGA nieprofesjonalne.

Ta sama kompilacja, tych samych rzeczy pod linuksem bez problemu znajdowała mi *.o, dokładnie taki sam makefile. Nawet sprawdziłem wszystkie zmienne systemowe i nie ma tam żadnych ścieżek dodatkowych do *.o. Wszystko tam chodzi estetycznie.

Musiałbym uzyskać ten same efekt na cygwinie.

0

Dobra, znalazłem odpowiedź. Przy instalacji chyba ktoś nadgorliwie sprawdził ścieżkę instalacji (make && make install) i ocenił, że jeśli jest ona zgodna ze wzorcem, to instalujemy w niej, a jeśli nie jest zgodna, to tworzymy nowy katalog (coś jak instalatory windows czasami tę sztuczkę stosują).

Tyle tylko, że ta nadgorliwość spowodowała główny problem, bo to linux a nie windows, że kompilacja jest wszystkiego od razu. Tutaj kompilować trzeba było kilka rzeczy zanim gcc się kompilowało. W efekcie jedna kompilacja zrobiła co chciała ze ścieżką instalacji, pozostałe natomiast zainstalowały się tam gdzie rzeczywiście im kazałem i dlatego nie działało. Wystarczyło przerzucić jeden katalog ze wszystkimi plikami o jeden stopień niżej i wszystko gra.

Polecam strace, bardzo przydatne, jak nie wiesz gdzie szuka plików, których nie znajduje (bo oczywiście ld nie pisał pełnej ścieżki, gdzie szukał).

1 użytkowników online, w tym zalogowanych: 0, gości: 1