170 похожих чатов

Здраствуйте, помогите прийти к решению проблемы. Есть класс class Window { public:

static GLFWwindow* window;
};
статическая переменная которого определена в файле его реализации GLFWwindow* Window::window;
но есть необходимость использовать ее в другого классе
class Events {
public:
static int initialize();
};
а именно в функции
int Events::initialize() {
GLFWwindow* window = Window::window;
return 0;
}
как это можно сделать?

37 ответов

12 просмотров

Ты уже это сделал

Артем- Автор вопроса
Kirill Bolshakov
Ты уже это сделал

Но компилятор так не считает

Артем- Автор вопроса
Артем
Но компилятор так не считает

выдает Ошибка LNK2001 неразрешенный внешний символ "public: static class GLFWwindow * Window::window"

Артем
выдает Ошибка LNK2001 неразрешенный внешний симв...

cpp файл с определением статической переменной не собираешь

Нет никаких препятствий чтобы у тебя это не получилось.

Ты же написал : статическая переменная которого определена в файле его реализации GLFWwindow* Window::window; Либо ты обманываешь и не определена, либо не может быть такой ошибки. Шли полный код...

Артем- Автор вопроса
Ilya Zviagin
Ты же написал : статическая переменная которого о...

код в нескольких файлах (7), как грузить?

Артем
https://pastebin.com/S9RUGQjs

Да все ок, должно работать

Артем- Автор вопроса
Ilya Zviagin
Да все ок, должно работать

не подскажите как в студие посмотреть порядок линковки? есть догадки что там проблема

Артем- Автор вопроса
Ilya Zviagin
Порядок линковки - это что?

в каком порядке файлы принимаются компилятором

Артем
не подскажите как в студие посмотреть порядок линк...

Почитай что такое раздельная компиляция. Это концепция, которая позволяет компилировать файлы независимо. После компиляции определенного файла часть имен (символов) остается неразрешенными (unresolved). Задача линковщика разрешить все unresolved символы. Сам понимаешь, здесь порядок абсолютно неважен.

Anatoly Shirokov
Почитай что такое раздельная компиляция. Это конце...

ЕМНИП важен же. Насколько я помню, линковщик в одном проходе и собирает по объектникам неразрешённые символы, и разрешает эти символы. То есть если к моменту появления неразрешённого символа в другом объектнике нужный объектник ещё не обошли, то произойдёт ошибка линковки.

Anatoly Shirokov
Почитай что такое раздельная компиляция. Это конце...

В 10-й студии были проблемы, которые реально решались изменением порядка линковки. в принципе, это были костыли...

Anatoly Shirokov
Почитай что такое раздельная компиляция. Это конце...

Порядок списка либ на входе линковщику важен, он как то их по порядку смотрит и назад не возвращается. По крайней мере линуксовый такой баг дизайна имеет

Kirill Bolshakov
Порядок списка либ на входе линковщику важен, он к...

Это разве баг? Иначе линкер бы пол века работал

Егор (Дима)
Это разве баг? Иначе линкер бы пол века работал

Почему пол века? Второй проход для разрешения оставшихся неразрешенных после первого, но в обратном порядке

Kirill Bolshakov
Почему пол века? Второй проход для разрешения оста...

т.е ему нужно будет для второго прохода загрузить в память все либы с которыми я линкуюсь и искать там функции? А память ему кто даст? У меня и обычный линкер комп крашит

Егор (Дима)
та всё равно дорого как-то

Можно сделать спец. флаг --not_zashkvar_mode который эту фичу включает

Егор (Дима)
так есть же уже что-то такое

-Wl,-\( -liba -libb -libc) если кто-то название знает то подскажите, я не могу это нагуглить нигде кроме лекции на ютубе

Егор (Дима)
-Wl,-\( -liba -libb -libc) если кто-то название зн...

Многопроходность линкера? https://sourceware.org/binutils/docs-2.16/ld/Options.html -( archives -) --start-group archives --end-group The archives should be a list of archive files. They may be either explicit file names, or -l options. The specified archives are searched repeatedly until no new undefined references are created. Normally, an archive is searched only once in the order that it is specified on the command line. If a symbol in that archive is needed to resolve an undefined symbol referred to by an object in an archive that appears later on the command line, the linker would not be able to resolve that reference. By grouping the archives, they all be searched repeatedly until all possible references are resolved. Using this option has a significant performance cost. It is best to use it only when there are unavoidable circular references between two or more archives.

🐈
В 10-й студии были проблемы, которые реально решал...

Не припомню проблем в студии и msvc. Gcc грешил, да.

Viktor Shamparov
ЕМНИП важен же. Насколько я помню, линковщик в одн...

Что за ересь? Задача линкера, чтобы все неразрешенные символы разрешились. Где здесь о порядке?

Anatoly Shirokov
Что за ересь? Задача линкера, чтобы все неразрешен...

Ну там в линуксе действительно есть такая проблема, но это только один Линкер на свете (хотя важный) Там не совсем это так тупорыло важно как Виктор написал. Но там реально иногда важен порядок указания и обработки библиотек. Но это скорее исключение

Ilya Zviagin
Ну там в линуксе действительно есть такая проблема...

Я знаю об особенностях gcc, но делать на основании этого "выводы" странно.

Anatoly Shirokov
Не припомню проблем в студии и msvc. Gcc грешил, д...

Насколько я помню, там при статической линковке MFC нужно было добавить некоторые lib-ки в список "исключить из сборки" и часть из них-же в список библиотек, с которыми надо линковаться. Да, звучит как бред, но без этого было не собрать прогу, которая не требовала бы установку дополнительных dll-ок на компе, где не установлена студия.

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта